Preliminaries

Set up environment

library(tidyverse)
library(langcog)
library(stats)
library(psych)
library(GPArotation)
library(lme4)
library(RColorBrewer)
# clear environment
rm(list=ls())
graphics.off()

Read in data

# ADULT run 01 (3-point scale)
d_adult01 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-01_2016-06-05_anonymized.csv") %>% select(-X)
# # ADULT run 02 (7-point scale)
# d_adult02 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-02_2016-07-19_anonymized.csv") %>% select(-X)
# 
# # ADULT run 03 (3-point scale, original wording for 'free will' and 'intentions')
# d_adult03 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-03_2016-12-08_anonymized.csv") %>% select(-X)
# CHILD run 01 [lydia, olivia, allie (summer 2016) + nicky, dru, ariel, olivia (fall 2016) + campbell (winter 2017)]
d_child01 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/children/run-01_2017-01-19_anonymized.csv") %>% select(-X)
# demographic info (for children)
child_demo <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/children/dimkid_participant_ages_2017-01-19.csv")

Tidy data

# tidy adult run 01
d_adult02 <- d_adult01 %>%
  select(subid, age, gender, ethnicity, duration,
         charName, trialNum, capacity, capWording, 
         hoverTime, rt, response, responseNum) %>%
  rename(character = charName,
         sessionDuration = duration) %>%
  mutate(ageGroup = "adult")
# tidy demographics
child_demo_tidy <- child_demo %>%
  mutate(subid = gsub(" ", "", subid)) %>%
  mutate(subid = gsub("-", "", subid)) %>%
  mutate(subid = toupper(subid)) %>%
  select(subid, age, gender, ethnicity)
# tidy child run 01
d_child02 <- d_child01 %>%
  filter(character %in% c("beetle", "robot"))  %>% # no elephant condition! (n = 1 child)
  select(subid, sessionDuration,
         character, trialNum, capacity, capWording, 
         hoverTime, rt, response, responseNum) %>%
  mutate(ageGroup = "child") %>%
  mutate(subid = gsub(" ", "", subid)) %>%
  mutate(subid = gsub("-", "", subid)) %>%
  mutate(subid = toupper(subid)) %>%
  left_join(child_demo_tidy) %>%
  mutate(subid = factor(as.character(subid)))
Joining, by = "subid"
# combine datasets
d <- d_adult02 %>%
  full_join(d_child02) %>%
  mutate(subid = factor(subid),
         character = factor(character),
         capWording = factor(gsub("\\ ", "_", gsub(" --.*", "", capWording))),
         responseCat = factor(response, levels = c("no", "kinda", "yes")),
         responseNum = ifelse(response == "no", 0,
                              ifelse(response == "kinda", 0.5,
                                     ifelse(response == "yes", 1,
                                            NA))),
         ageGroup = factor(ageGroup, levels = c("adult", "child"))) %>%
  distinct()
Joining, by = c("subid", "age", "gender", "ethnicity", "sessionDuration", "character", "trialNum", "capacity", "capWording", "hoverTime", "rt", "response", "responseNum", "ageGroup")
joining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vector

Demographics

# total n
d %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
  mutate(ageGroup2 = ifelse(ageGroup == "adult",
                            "adult",
                            ifelse(age < 7 | age > 10, 
                                   "out of age range",
                                   ifelse(is.na(age), 
                                          "missing age",
                                          "child")))) %>%
  count(ageGroup2)
# drop children outside of target age range (7-9y)
d1 <- d %>%
  filter((age >= 7 & age <= 10) | ageGroup == "adult")
d1 %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
    mutate(ageGroup2 = ifelse(ageGroup == "adult",
                            "adult",
                            ifelse(age < 7 | age > 10, 
                                   "out of age range",
                                   ifelse(is.na(age), 
                                          "missing age",
                                          "child")))) %>%
  count(ageGroup2)
# condition
d1 %>% 
  select(ageGroup, subid, character) %>%
  distinct(.keep_all = T) %>%
  count(ageGroup, character)
# age 
d1 %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
  group_by(ageGroup) %>%
  summarise(mean_age = mean(age, na.rm = T),
            sd_age = sd(age, na.rm = T),
            median_age = median(age, na.rm = T),
            min_age = min(age, na.rm = T),
            max_age = max(age, na.rm = T))
# plot children's age
qplot(d1 %>% 
        filter(ageGroup == "child") %>%
        distinct(subid, .keep_all = T) %>% 
        select(age), bins = 18) +
  geom_vline(xintercept = median(d1$age[d1$ageGroup == "child"], na.rm = T), color = "red")

# check children's age by condition
d1 %>% 
  filter(ageGroup == "child") %>%
  distinct(subid, .keep_all = T) %>% 
  select(age, character) %>%
  group_by(character) %>% 
  summarise(median = median(age, na.rm = T))
t.test(age ~ character, 
       d1 %>% 
         filter(ageGroup == "child") %>%
         select(subid, age, character) %>% 
         distinct)

    Welch Two Sample t-test

data:  age by character
t = 0.48254, df = 197.76, p-value = 0.63
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.1769700  0.2916335
sample estimates:
mean in group beetle  mean in group robot 
            8.381464             8.324132 
ggplot(d1 %>%
         filter(ageGroup == "child") %>%
         distinct(subid, .keep_all = T) %>% 
         select(age, character) %>%
         group_by(character) %>%
         mutate(median_age = median(age, na.rm = T)),
       aes(x = age)) +
  geom_histogram(bins = 9) +
  facet_wrap(~ character) +
  geom_vline(xintercept = median(d$age[d$ageGroup == "child"], na.rm = T), color = "black") +
  geom_vline(aes(xintercept = median_age, color = character), lty = 2)

# duration
d1 %>%
  group_by(ageGroup) %>%
  summarise(mean = mean(sessionDuration, na.rm = T),
            median = median(sessionDuration, na.rm = T),
            min = min(sessionDuration, na.rm = T),
            max = max(sessionDuration, na.rm = T))
# plot duration by age group and character
ggplot(d1, aes(sessionDuration)) +
  facet_grid(character ~ ageGroup) +
  geom_histogram(breaks = 0:15)

t.test(sessionDuration ~ character,
       d1 %>%
         filter(ageGroup == "child") %>%
         select(subid, character, sessionDuration) %>%
         left_join(d %>% select(subid, sessionDuration)) %>%
         mutate(subid = as.character(subid),
                character = factor(character),
                sessionDuration = round(as.numeric(as.character(sessionDuration)), 3)) %>%
         distinct())
Joining, by = c("subid", "sessionDuration")
Joining, by = c("subid", "sessionDuration")

    Welch Two Sample t-test

data:  sessionDuration by character
t = -0.38762, df = 149.35, p-value = 0.6988
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.5105418  0.3430885
sample estimates:
mean in group beetle  mean in group robot 
            5.293337             5.377063 
t.test(sessionDuration ~ character,
       d1 %>%
         filter(ageGroup == "adult") %>%
         select(subid, character, sessionDuration) %>%
         left_join(d %>% select(subid, sessionDuration)) %>%
         mutate(subid = as.character(subid),
                character = factor(character),
                sessionDuration = round(as.numeric(as.character(sessionDuration)), 3)) %>%
         distinct())
Joining, by = c("subid", "sessionDuration")
Joining, by = c("subid", "sessionDuration")

    Welch Two Sample t-test

data:  sessionDuration by character
t = 0.76334, df = 186.45, p-value = 0.4462
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2954407  0.6683779
sample estimates:
mean in group beetle  mean in group robot 
            2.963449             2.776980 
# gender
d1 %>%
  select(ageGroup, subid, gender) %>%
  distinct(.keep_all = T) %>%
  count(ageGroup, gender)
# ethnicity
d1 %>% 
  select(ageGroup, subid, ethnicity) %>%
  mutate(ethnicity = tolower(ethnicity)) %>%
  mutate(black = grepl("black", ethnicity) |
           grepl("african american", ethnicity),
         east_asian = grepl("east asian", ethnicity) |
           grepl("eastasian", ethnicity) |
           grepl("chinese", ethnicity) |
           grepl("china", ethnicity) |
           grepl("korea", ethnicity) |
           grepl("japan", ethnicity) |
           grepl("taiwan", ethnicity),
         south_asian = grepl("south asian", ethnicity) |
           grepl("southasian", ethnicity) |
           grepl("india", ethnicity) |
           grepl("pakistan", ethnicity) |
           grepl("bangla", ethnicity) |
           grepl("sri lanka", ethnicity),
         latino = grepl("latin", ethnicity) |
           grepl("hispanic", ethnicity) |
           grepl("mexic", ethnicity),
         middle_eastern = grepl("middle", ethnicity),
         pac_island = grepl("pacific", ethnicity) |
           grepl("hawaii", ethnicity),
         native_am = grepl("nativeamerican", ethnicity) |
           grepl("native american", ethnicity) |
           grepl("american indian", ethnicity) |
           grepl("alaska native", ethnicity),
         white = grepl("white", ethnicity),
         other = grepl("other", ethnicity)) %>%
  distinct(.keep_all = T) %>%
  gather(ethnicityTF, TF, -subid, -ethnicity, -ageGroup) %>%
  filter(TF) %>%
  count(ageGroup, ethnicityTF)
# NOTE: not mutually exclusive!!
# mutually exclusive version
d1 %>% 
  select(ageGroup, subid, ethnicity) %>%
  mutate(ethnicity = tolower(ethnicity)) %>%
  distinct(.keep_all = T) %>%
  mutate(ethnicity2 = ifelse(ageGroup == "adult",
                             ifelse(grepl(",", ethnicity), "multiple", ethnicity),
                             ifelse(grepl(";", ethnicity), "multiple", ethnicity))) %>% 
  mutate(ethnicity3 = ifelse(grepl("other", ethnicity2),
                             ifelse(grepl("/", ethnicity2) | grepl("mix", ethnicity2),
                                    "multiple",
                                    ifelse(grepl("asian", ethnicity2) | grepl("korean", ethnicity2),
                                           "east asian",
                                           ethnicity2)),
                             ethnicity2)) %>%
  count(ageGroup, ethnicity3) %>%
  ungroup() %>%
  group_by(ageGroup) %>%
  mutate(prop = n/sum(n)) %>%
  arrange(ageGroup, desc(n))
# experimineter error
d_child01 %>% # use d_child01 (before dropping n = 1 child in "elephant" condition)
  filter(!(character %in% c("beetle", "robot"))) %>%
  select(subid) %>%
  distinct() %>%
  count() %>%
  mutate(percent = n/200)
# incomplete trials ("skip", "bail")
d1 %>% # use d1 (before dropping trials with rt > 250ms) 
  count(ageGroup, subid) %>%
  filter(n != 40) %>%
  mutate(n_missing = 40-n) %>%
  group_by(ageGroup) %>%
  summarise(sum_missing = sum(n_missing)) %>%
  mutate(percent = sum_missing/8000)
# trials with rt > 250ms
d1 %>%
  filter(rt < 250) %>%
  count(ageGroup) %>%
  mutate(percent = n/8000)
# all missing trials
d1 %>% # use d1 (before dropping trials) 
  count(ageGroup, subid) %>%
  filter(n != 40) %>%
  mutate(n_NA = 40-n) %>%
  group_by(ageGroup) %>%
  summarise(n_NA = sum(n_NA)) %>%
  mutate(percent_NA = n_NA/8000) %>%
  full_join(d1 %>%
              filter(rt < 250) %>%
              count(ageGroup) %>%
              rename(n_fast = n) %>%
              mutate(percent_fast = n_fast/8000)) %>%
  mutate(n_missing_TOTAL = n_NA + n_fast,
         percent_missing_TOTAL = percent_NA + percent_fast)
Joining, by = "ageGroup"
NA

Data preparation

Filter RTs

# examine and filter by RTs
ggplot(d1) +
  geom_histogram(aes(x = rt), bins = 100) +
  facet_wrap(~ageGroup) +
  scale_x_log10(breaks = seq(0, 1000, 100)) +
  geom_vline(xintercept = 250, color = "red")

d2 <- d1 %>%
  filter(!(rt < 250) | is.na(rt)) # preset criterion of 250ms

Look at hover time

d2 %>%
  filter(!(capacity %in% c("personality", "beliefs", "pleasure", "desires", "self_restraint", "goals", "nauseated"))) %>%
  mutate(noHover = hoverTime == 0) %>%
  count(ageGroup, noHover) %>%
  group_by(ageGroup) %>%
  mutate(percent = n/sum(n))
ggplot(d2, aes(x = hoverTime)) +
  facet_grid(~ ageGroup) +
  geom_histogram()

Prepare data for EFA

# finish tidying
d3 <- d2 %>%
  select(capacity, responseNum, subid) %>%
  spread(capacity, responseNum)
# make combined dataset
d3_combined <- data.frame(d3[,-1], row.names = d3[,1])
# make separate child and adult datasets
d3_adult <- d3 %>%
  left_join(d %>% select(subid, ageGroup)) %>%
  filter(ageGroup == "adult") %>%
  select(-ageGroup) %>%
  distinct()
Joining, by = "subid"
d3_adult <- data.frame(d3_adult[,-1], row.names = d3_adult[,1])
d3_child <- d3 %>%
  left_join(d %>% select(subid, ageGroup)) %>%
  filter(ageGroup == "child") %>%
  select(-ageGroup) %>%
  distinct()
Joining, by = "subid"
d3_child <- data.frame(d3_child[,-1], row.names = d3_child[,1])

General analysis settings

# set correlation type: pearson or polychoric?
cor_type <- "cor"
# cor_type <- "poly"
# set rotation type: varimax or oblimin?
rot_type <- "varimax"
# rot_type <- "oblimin"
# set score type
# score_type <- "regression"
# score_type <- "Thurstone"
score_type <- "tenBerge"
# score_type <- "Anderson"
# score_type <- "Bartlett"
# score_type <- "Harman"

Adults alone

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_adult_max_unrot <- fa(d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
efa_adult_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8  MR11   MR9  MR10  MR12  MR13   h2
angry           0.66  0.09  0.03  0.00 -0.02 -0.23 -0.08 -0.13  0.05  0.01  0.04 -0.02  0.21 0.57
beliefs         0.39  0.45  0.16 -0.06  0.23 -0.06  0.44  0.10  0.03  0.13 -0.14 -0.01 -0.01 0.68
calm            0.69 -0.07  0.13 -0.08  0.08 -0.04 -0.04  0.10  0.08  0.10  0.08  0.12  0.05 0.56
choices         0.24  0.22  0.48  0.12  0.25  0.03 -0.20 -0.09 -0.14 -0.19 -0.12 -0.18  0.14 0.59
communicating  -0.02  0.51  0.45  0.11 -0.27 -0.14 -0.19  0.16 -0.01  0.10 -0.08  0.08 -0.11 0.67
computations   -0.48  0.74  0.20  0.00 -0.14  0.01  0.05  0.02  0.05 -0.05 -0.03  0.00  0.08 0.84
conscious       0.34  0.00  0.42  0.22  0.20  0.07 -0.01 -0.14  0.00 -0.14 -0.15  0.07  0.04 0.45
depressed       0.74  0.27 -0.08 -0.34 -0.01  0.06 -0.09 -0.16  0.14 -0.04  0.02  0.00 -0.05 0.81
depth           0.14  0.14  0.46  0.31 -0.06  0.29  0.02 -0.20 -0.05 -0.01 -0.07  0.01  0.05 0.48
desires         0.64 -0.09  0.14  0.03  0.11  0.07  0.00  0.03 -0.24  0.27  0.11 -0.16 -0.02 0.63
disrespected    0.65  0.31 -0.18 -0.07 -0.01  0.11 -0.07 -0.13  0.03  0.04 -0.04  0.02 -0.06 0.60
embarrassed     0.56  0.44 -0.38  0.32 -0.01 -0.04 -0.02  0.18  0.02 -0.14  0.18  0.05  0.01 0.84
emo_recog       0.27  0.41  0.18 -0.11  0.17  0.04  0.28  0.03 -0.03 -0.17 -0.06  0.16 -0.16 0.49
fear            0.79 -0.35  0.20 -0.06 -0.24 -0.22  0.12 -0.06 -0.03 -0.08  0.02 -0.02  0.00 0.91
free_will       0.19  0.17  0.40  0.16  0.36 -0.19 -0.19 -0.12 -0.14 -0.08  0.07 -0.03  0.09 0.51
goal            0.32  0.16  0.32  0.11  0.13 -0.08  0.18  0.02 -0.10  0.01  0.09 -0.15  0.05 0.35
guilt           0.67  0.48 -0.38  0.31 -0.03 -0.04  0.00 -0.07 -0.02  0.03 -0.09 -0.02 -0.02 0.93
happy           0.76  0.20 -0.02 -0.38  0.04 -0.03 -0.15 -0.08  0.05  0.04 -0.08  0.05 -0.01 0.81
hungry          0.65 -0.64 -0.01  0.15  0.09  0.08 -0.02  0.07  0.00  0.04  0.02  0.01 -0.02 0.89
intentions      0.05  0.54  0.33  0.00  0.13 -0.20  0.06  0.05  0.08  0.05  0.30 -0.13 -0.05 0.59
joy             0.77  0.26 -0.10 -0.33 -0.06  0.14 -0.04  0.09 -0.10  0.02  0.05  0.10  0.05 0.84
love            0.73  0.31 -0.02 -0.19  0.07  0.22  0.04 -0.01 -0.07  0.03  0.01 -0.12 -0.07 0.74
morality        0.20  0.50  0.20 -0.10  0.04  0.03  0.22  0.10  0.09 -0.02  0.05 -0.15  0.01 0.43
nauseated       0.67 -0.26  0.16 -0.03 -0.06  0.13 -0.09  0.11 -0.14  0.07  0.02 -0.02  0.05 0.61
odors           0.50 -0.37  0.20  0.26  0.10  0.19  0.00  0.08  0.03 -0.09  0.06  0.22  0.02 0.61
pain            0.71 -0.45  0.09  0.12 -0.06 -0.08 -0.09  0.13  0.15  0.10 -0.10 -0.02  0.03 0.81
personality     0.35  0.42  0.12 -0.14  0.20  0.03  0.19  0.17 -0.11  0.03 -0.12  0.15  0.11 0.50
pleasure        0.72 -0.10  0.04 -0.12 -0.13  0.23  0.01  0.20  0.01 -0.27 -0.09 -0.13 -0.06 0.76
pride           0.66  0.41 -0.12 -0.19  0.01 -0.02  0.05 -0.08  0.00  0.06  0.19  0.01  0.12 0.72
reasoning       0.21  0.30  0.49  0.12  0.11 -0.15 -0.16 -0.08 -0.20 -0.11  0.01  0.22 -0.06 0.56
recognizing    -0.07  0.65  0.47  0.03 -0.19 -0.04 -0.09  0.18 -0.01  0.12 -0.07  0.04  0.03 0.75
remembering    -0.01  0.54  0.44  0.04 -0.08  0.05 -0.14  0.05 -0.04 -0.01  0.04 -0.14 -0.24 0.60
safe            0.72 -0.27  0.24  0.03  0.10 -0.11  0.12 -0.09 -0.05  0.00 -0.04  0.08 -0.10 0.72
seeing          0.24  0.03  0.45  0.33 -0.08  0.27 -0.02 -0.15  0.14 -0.02  0.06 -0.01  0.00 0.50
self_aware      0.36  0.11  0.33  0.09  0.31 -0.14 -0.05 -0.01  0.17  0.10  0.05  0.07 -0.22 0.47
self_restraint  0.33  0.36  0.20 -0.07  0.23  0.02  0.09  0.07  0.15 -0.06 -0.09  0.03  0.17 0.42
sounds          0.18  0.09  0.45  0.21 -0.28  0.22  0.06 -0.17 -0.02  0.06  0.18  0.06  0.00 0.48
temperature     0.21  0.06  0.44  0.28 -0.14  0.35  0.17 -0.18  0.17  0.10  0.11  0.04  0.03 0.58
thoughts        0.45  0.15  0.31 -0.06  0.36 -0.11 -0.14  0.13  0.21 -0.10  0.04 -0.09  0.00 0.57
tired           0.71 -0.29  0.20  0.11 -0.07  0.04 -0.03  0.07  0.06  0.07 -0.07 -0.08  0.12 0.69
                  u2 com
angry          0.427 1.7
beliefs        0.323 4.4
calm           0.445 1.4
choices        0.413 5.1
communicating  0.333 3.8
computations   0.155 2.1
conscious      0.545 4.1
depressed      0.191 2.0
depth          0.515 3.7
desires        0.370 2.2
disrespected   0.403 1.9
embarrassed    0.160 4.2
emo_recog      0.513 5.3
fear           0.087 2.1
free_will      0.492 5.4
goal           0.654 4.9
guilt          0.070 3.1
happy          0.189 1.8
hungry         0.112 2.2
intentions     0.415 3.2
joy            0.162 1.9
love           0.262 1.9
morality       0.570 2.8
nauseated      0.391 1.8
odors          0.391 4.0
pain           0.192 2.2
personality    0.501 4.9
pleasure       0.242 2.0
pride          0.282 2.3
reasoning      0.438 4.3
recognizing    0.251 2.5
remembering    0.396 2.8
safe           0.283 1.8
seeing         0.498 3.9
self_aware     0.529 5.2
self_restraint 0.582 4.9
sounds         0.519 4.4
temperature    0.423 5.2
thoughts       0.433 4.6
tired          0.313 1.8

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9 MR10 MR12 MR13
SS loadings           10.58 5.08 3.45 1.31 1.07 0.82 0.73 0.53 0.43 0.41 0.40 0.39 0.34
Proportion Var         0.26 0.13 0.09 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.26 0.39 0.48 0.51 0.54 0.56 0.58 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained   0.41 0.20 0.13 0.05 0.04 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01
Cumulative Proportion  0.41 0.61 0.75 0.80 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9
Correlation of scores with factors             0.99 0.98 0.96 0.93 0.87 0.85 0.82 0.80 0.73 0.76
Multiple R square of scores with factors       0.98 0.96 0.92 0.86 0.76 0.72 0.67 0.64 0.54 0.57
Minimum correlation of possible factor scores  0.96 0.92 0.83 0.72 0.52 0.44 0.34 0.27 0.08 0.15
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.68
Multiple R square of scores with factors       0.56 0.50  0.47
Minimum correlation of possible factor scores  0.12 0.01 -0.07
# examine eigenvalues and variance explained
efa_adult_max_unrot_eigenvalues <- print(efa_adult_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8  MR11   MR9  MR10  MR12  MR13   h2
angry           0.66  0.09  0.03  0.00 -0.02 -0.23 -0.08 -0.13  0.05  0.01  0.04 -0.02  0.21 0.57
beliefs         0.39  0.45  0.16 -0.06  0.23 -0.06  0.44  0.10  0.03  0.13 -0.14 -0.01 -0.01 0.68
calm            0.69 -0.07  0.13 -0.08  0.08 -0.04 -0.04  0.10  0.08  0.10  0.08  0.12  0.05 0.56
choices         0.24  0.22  0.48  0.12  0.25  0.03 -0.20 -0.09 -0.14 -0.19 -0.12 -0.18  0.14 0.59
communicating  -0.02  0.51  0.45  0.11 -0.27 -0.14 -0.19  0.16 -0.01  0.10 -0.08  0.08 -0.11 0.67
computations   -0.48  0.74  0.20  0.00 -0.14  0.01  0.05  0.02  0.05 -0.05 -0.03  0.00  0.08 0.84
conscious       0.34  0.00  0.42  0.22  0.20  0.07 -0.01 -0.14  0.00 -0.14 -0.15  0.07  0.04 0.45
depressed       0.74  0.27 -0.08 -0.34 -0.01  0.06 -0.09 -0.16  0.14 -0.04  0.02  0.00 -0.05 0.81
depth           0.14  0.14  0.46  0.31 -0.06  0.29  0.02 -0.20 -0.05 -0.01 -0.07  0.01  0.05 0.48
desires         0.64 -0.09  0.14  0.03  0.11  0.07  0.00  0.03 -0.24  0.27  0.11 -0.16 -0.02 0.63
disrespected    0.65  0.31 -0.18 -0.07 -0.01  0.11 -0.07 -0.13  0.03  0.04 -0.04  0.02 -0.06 0.60
embarrassed     0.56  0.44 -0.38  0.32 -0.01 -0.04 -0.02  0.18  0.02 -0.14  0.18  0.05  0.01 0.84
emo_recog       0.27  0.41  0.18 -0.11  0.17  0.04  0.28  0.03 -0.03 -0.17 -0.06  0.16 -0.16 0.49
fear            0.79 -0.35  0.20 -0.06 -0.24 -0.22  0.12 -0.06 -0.03 -0.08  0.02 -0.02  0.00 0.91
free_will       0.19  0.17  0.40  0.16  0.36 -0.19 -0.19 -0.12 -0.14 -0.08  0.07 -0.03  0.09 0.51
goal            0.32  0.16  0.32  0.11  0.13 -0.08  0.18  0.02 -0.10  0.01  0.09 -0.15  0.05 0.35
guilt           0.67  0.48 -0.38  0.31 -0.03 -0.04  0.00 -0.07 -0.02  0.03 -0.09 -0.02 -0.02 0.93
happy           0.76  0.20 -0.02 -0.38  0.04 -0.03 -0.15 -0.08  0.05  0.04 -0.08  0.05 -0.01 0.81
hungry          0.65 -0.64 -0.01  0.15  0.09  0.08 -0.02  0.07  0.00  0.04  0.02  0.01 -0.02 0.89
intentions      0.05  0.54  0.33  0.00  0.13 -0.20  0.06  0.05  0.08  0.05  0.30 -0.13 -0.05 0.59
joy             0.77  0.26 -0.10 -0.33 -0.06  0.14 -0.04  0.09 -0.10  0.02  0.05  0.10  0.05 0.84
love            0.73  0.31 -0.02 -0.19  0.07  0.22  0.04 -0.01 -0.07  0.03  0.01 -0.12 -0.07 0.74
morality        0.20  0.50  0.20 -0.10  0.04  0.03  0.22  0.10  0.09 -0.02  0.05 -0.15  0.01 0.43
nauseated       0.67 -0.26  0.16 -0.03 -0.06  0.13 -0.09  0.11 -0.14  0.07  0.02 -0.02  0.05 0.61
odors           0.50 -0.37  0.20  0.26  0.10  0.19  0.00  0.08  0.03 -0.09  0.06  0.22  0.02 0.61
pain            0.71 -0.45  0.09  0.12 -0.06 -0.08 -0.09  0.13  0.15  0.10 -0.10 -0.02  0.03 0.81
personality     0.35  0.42  0.12 -0.14  0.20  0.03  0.19  0.17 -0.11  0.03 -0.12  0.15  0.11 0.50
pleasure        0.72 -0.10  0.04 -0.12 -0.13  0.23  0.01  0.20  0.01 -0.27 -0.09 -0.13 -0.06 0.76
pride           0.66  0.41 -0.12 -0.19  0.01 -0.02  0.05 -0.08  0.00  0.06  0.19  0.01  0.12 0.72
reasoning       0.21  0.30  0.49  0.12  0.11 -0.15 -0.16 -0.08 -0.20 -0.11  0.01  0.22 -0.06 0.56
recognizing    -0.07  0.65  0.47  0.03 -0.19 -0.04 -0.09  0.18 -0.01  0.12 -0.07  0.04  0.03 0.75
remembering    -0.01  0.54  0.44  0.04 -0.08  0.05 -0.14  0.05 -0.04 -0.01  0.04 -0.14 -0.24 0.60
safe            0.72 -0.27  0.24  0.03  0.10 -0.11  0.12 -0.09 -0.05  0.00 -0.04  0.08 -0.10 0.72
seeing          0.24  0.03  0.45  0.33 -0.08  0.27 -0.02 -0.15  0.14 -0.02  0.06 -0.01  0.00 0.50
self_aware      0.36  0.11  0.33  0.09  0.31 -0.14 -0.05 -0.01  0.17  0.10  0.05  0.07 -0.22 0.47
self_restraint  0.33  0.36  0.20 -0.07  0.23  0.02  0.09  0.07  0.15 -0.06 -0.09  0.03  0.17 0.42
sounds          0.18  0.09  0.45  0.21 -0.28  0.22  0.06 -0.17 -0.02  0.06  0.18  0.06  0.00 0.48
temperature     0.21  0.06  0.44  0.28 -0.14  0.35  0.17 -0.18  0.17  0.10  0.11  0.04  0.03 0.58
thoughts        0.45  0.15  0.31 -0.06  0.36 -0.11 -0.14  0.13  0.21 -0.10  0.04 -0.09  0.00 0.57
tired           0.71 -0.29  0.20  0.11 -0.07  0.04 -0.03  0.07  0.06  0.07 -0.07 -0.08  0.12 0.69
                  u2 com
angry          0.427 1.7
beliefs        0.323 4.4
calm           0.445 1.4
choices        0.413 5.1
communicating  0.333 3.8
computations   0.155 2.1
conscious      0.545 4.1
depressed      0.191 2.0
depth          0.515 3.7
desires        0.370 2.2
disrespected   0.403 1.9
embarrassed    0.160 4.2
emo_recog      0.513 5.3
fear           0.087 2.1
free_will      0.492 5.4
goal           0.654 4.9
guilt          0.070 3.1
happy          0.189 1.8
hungry         0.112 2.2
intentions     0.415 3.2
joy            0.162 1.9
love           0.262 1.9
morality       0.570 2.8
nauseated      0.391 1.8
odors          0.391 4.0
pain           0.192 2.2
personality    0.501 4.9
pleasure       0.242 2.0
pride          0.282 2.3
reasoning      0.438 4.3
recognizing    0.251 2.5
remembering    0.396 2.8
safe           0.283 1.8
seeing         0.498 3.9
self_aware     0.529 5.2
self_restraint 0.582 4.9
sounds         0.519 4.4
temperature    0.423 5.2
thoughts       0.433 4.6
tired          0.313 1.8

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9 MR10 MR12 MR13
SS loadings           10.58 5.08 3.45 1.31 1.07 0.82 0.73 0.53 0.43 0.41 0.40 0.39 0.34
Proportion Var         0.26 0.13 0.09 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.26 0.39 0.48 0.51 0.54 0.56 0.58 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained   0.41 0.20 0.13 0.05 0.04 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01
Cumulative Proportion  0.41 0.61 0.75 0.80 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9
Correlation of scores with factors             0.99 0.98 0.96 0.93 0.87 0.85 0.82 0.80 0.73 0.76
Multiple R square of scores with factors       0.98 0.96 0.92 0.86 0.76 0.72 0.67 0.64 0.54 0.57
Minimum correlation of possible factor scores  0.96 0.92 0.83 0.72 0.52 0.44 0.34 0.27 0.08 0.15
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.68
Multiple R square of scores with factors       0.56 0.50  0.47
Minimum correlation of possible factor scores  0.12 0.01 -0.07
# count factors with eigenvalues > 1 and variance explained > 5%
efa_adult_max_unrot_nfactors <- efa_adult_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_adult_max_unrot_nfactors
[1] 4
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_adult_max_unrot_loadings <- fa.sort(loadings(efa_adult_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_adult_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3, F4 = MR4) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         F4_abs = abs(F4),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs, F4_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        ifelse(loading_abs == abs(F4), F4,
                                               NA)))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       ifelse(loading == F4, "F4",
                                              NA)))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           ifelse(loading == F4, "Factor 4",
                                                  NA)))))
efa_adult_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1
# reset as needed
efa_adult_max_unrot_nfactors <- efa_adult_max_unrot_loadings %>% count(factorName) %>% nrow()

Maximal (13-factor) rotated solution

# do factor analysis
efa_adult_max_rot <- fa(d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
efa_adult_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR8   MR1   MR7   MR3   MR2   MR5   MR4  MR10  MR13   MR9  MR11   MR6  MR12   h2
angry           0.40  0.48  0.06  0.04  0.03  0.23  0.19  0.14 -0.04 -0.19 -0.12 -0.05 -0.11 0.57
beliefs         0.06  0.25  0.73  0.06  0.11  0.08  0.10  0.06  0.10 -0.06  0.09 -0.02 -0.12 0.68
calm            0.56  0.39  0.16  0.05  0.02  0.11  0.05  0.07  0.12 -0.09 -0.02 -0.01  0.14 0.56
choices         0.07  0.10  0.13  0.23  0.16  0.66 -0.03 -0.02 -0.07  0.14  0.04 -0.11 -0.05 0.59
communicating  -0.11  0.02  0.09  0.18  0.76  0.15  0.06  0.00  0.05 -0.04 -0.03  0.03 -0.02 0.67
computations   -0.71 -0.06  0.23  0.14  0.47  0.05  0.02  0.07 -0.11 -0.01 -0.12 -0.06 -0.01 0.84
conscious       0.27  0.03  0.18  0.34  0.00  0.44  0.01 -0.13  0.07  0.03 -0.07  0.03 -0.04 0.45
depressed       0.23  0.84  0.14  0.03  0.01  0.07  0.05  0.05  0.11  0.07 -0.08  0.01 -0.05 0.81
depth           0.05 -0.01  0.09  0.61  0.13  0.26  0.02 -0.11 -0.06  0.02  0.06  0.00 -0.04 0.48
desires         0.53  0.31  0.12  0.12 -0.02  0.16  0.06  0.10  0.01 -0.04  0.43 -0.02  0.00 0.63
disrespected    0.17  0.68  0.13  0.08  0.01  0.03  0.26 -0.08  0.08  0.02  0.05  0.00 -0.05 0.60
embarrassed     0.11  0.42  0.15 -0.02  0.06  0.02  0.77  0.11  0.01  0.06 -0.03  0.02  0.12 0.84
emo_recog      -0.05  0.25  0.54  0.10  0.10  0.14  0.05 -0.02  0.10  0.13 -0.07  0.24  0.02 0.49
fear            0.81  0.31  0.04  0.11 -0.01  0.04 -0.02  0.16 -0.10 -0.02 -0.13  0.20 -0.21 0.91
free_will       0.07  0.03  0.09  0.09  0.11  0.66  0.04  0.11  0.09 -0.09  0.05  0.03  0.02 0.51
goal            0.20  0.07  0.31  0.19  0.09  0.28  0.07  0.23 -0.02  0.00  0.12  0.02 -0.08 0.35
guilt           0.13  0.56  0.19  0.05  0.04  0.05  0.71 -0.09  0.02 -0.06  0.07 -0.03 -0.17 0.93
happy           0.34  0.79  0.17 -0.09  0.07  0.13 -0.03 -0.04  0.08 -0.01 -0.03  0.00 -0.03 0.81
hungry          0.85  0.08 -0.10  0.08 -0.35  0.02  0.06 -0.07  0.08  0.04  0.08 -0.01  0.06 0.89
intentions     -0.21  0.11  0.29  0.09  0.35  0.26  0.07  0.44  0.19 -0.03  0.04  0.00  0.01 0.59
joy             0.33  0.78  0.24 -0.02  0.08 -0.01  0.09  0.00 -0.11  0.06  0.07  0.06  0.17 0.84
love            0.25  0.69  0.30  0.11  0.02  0.08  0.12  0.02  0.02  0.18  0.20 -0.01 -0.01 0.74
morality       -0.12  0.25  0.45  0.13  0.23  0.08  0.05  0.23  0.02  0.12  0.00 -0.09 -0.04 0.43
nauseated       0.66  0.30  0.01  0.14  0.00  0.09 -0.02 -0.02 -0.09  0.07  0.15 -0.01  0.11 0.61
odors           0.60  0.01  0.02  0.31 -0.18  0.14  0.11 -0.10  0.09  0.05 -0.05  0.07  0.24 0.61
pain            0.85  0.17 -0.05  0.06 -0.05  0.02  0.08 -0.06  0.09 -0.03 -0.05 -0.14 -0.05 0.81
personality     0.04  0.31  0.56 -0.01  0.15  0.16  0.07 -0.07 -0.06 -0.05  0.05  0.02  0.14 0.50
pleasure        0.57  0.43  0.14  0.10 -0.02  0.00  0.08 -0.03 -0.12  0.44 -0.07 -0.01  0.02 0.76
pride           0.14  0.72  0.26  0.03  0.04  0.06  0.21  0.21 -0.03 -0.11  0.03  0.01  0.04 0.72
reasoning       0.06  0.09  0.14  0.20  0.36  0.52  0.03 -0.02  0.06 -0.07 -0.02  0.28  0.07 0.56
recognizing    -0.25  0.06  0.26  0.21  0.73  0.15  0.00  0.03 -0.04 -0.04 -0.01 -0.07  0.05 0.75
remembering    -0.23  0.11  0.12  0.25  0.56  0.23  0.00  0.11  0.12  0.21  0.12  0.04 -0.05 0.60
safe            0.70  0.24  0.18  0.15 -0.11  0.20 -0.01  0.00  0.13 -0.04  0.02  0.19 -0.11 0.72
seeing          0.18  0.01  0.00  0.63  0.11  0.19  0.05  0.02  0.09  0.07 -0.04 -0.05  0.00 0.50
self_aware      0.25  0.13  0.21  0.12  0.13  0.32  0.03  0.07  0.45 -0.04  0.02  0.04  0.00 0.47
self_restraint  0.04  0.28  0.44  0.09  0.09  0.26  0.05  0.02  0.05  0.00 -0.13 -0.16  0.07 0.42
sounds          0.12  0.06 -0.01  0.62  0.21  0.05 -0.03  0.11 -0.05 -0.04  0.04  0.12  0.02 0.48
temperature     0.13  0.02  0.13  0.73  0.07  0.02 -0.01  0.06  0.07 -0.02  0.00 -0.04  0.02 0.58
thoughts        0.28  0.25  0.25 -0.01  0.11  0.44  0.01  0.16  0.28  0.12 -0.10 -0.17  0.08 0.57
tired           0.74  0.23  0.05  0.21 -0.01  0.10  0.06  0.00 -0.03  0.01  0.01 -0.15 -0.04 0.69
                  u2 com
angry          0.427 3.9
beliefs        0.323 1.5
calm           0.445 2.5
choices        0.413 1.8
communicating  0.333 1.3
computations   0.155 2.3
conscious      0.545 3.5
depressed      0.191 1.3
depth          0.515 1.7
desires        0.370 3.3
disrespected   0.403 1.7
embarrassed    0.160 1.8
emo_recog      0.513 2.6
fear           0.087 1.8
free_will      0.492 1.3
goal           0.654 5.5
guilt          0.070 2.4
happy          0.189 1.6
hungry         0.112 1.5
intentions     0.415 4.9
joy            0.162 1.8
love           0.262 2.3
morality       0.570 3.7
nauseated      0.391 1.8
odors          0.391 2.5
pain           0.192 1.2
personality    0.501 2.3
pleasure       0.242 3.3
pride          0.282 1.9
reasoning      0.438 3.2
recognizing    0.251 1.9
remembering    0.396 3.3
safe           0.283 2.1
seeing         0.498 1.5
self_aware     0.529 3.7
self_restraint 0.582 3.5
sounds         0.519 1.6
temperature    0.423 1.2
thoughts       0.433 5.5
tired          0.313 1.5

                       MR8  MR1  MR7  MR3  MR2  MR5  MR4 MR10 MR13  MR9 MR11  MR6 MR12
SS loadings           6.47 5.37 2.53 2.41 2.36 2.33 1.36 0.57 0.55 0.46 0.42 0.38 0.32
Proportion Var        0.16 0.13 0.06 0.06 0.06 0.06 0.03 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var        0.16 0.30 0.36 0.42 0.48 0.54 0.57 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained  0.25 0.21 0.10 0.09 0.09 0.09 0.05 0.02 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion 0.25 0.46 0.56 0.66 0.75 0.84 0.89 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  2.5
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR8  MR1  MR7  MR3  MR2  MR5  MR4 MR10 MR13  MR9
Correlation of scores with factors             0.96 0.94 0.86 0.88 0.89 0.86 0.94 0.76 0.75 0.76
Multiple R square of scores with factors       0.93 0.89 0.73 0.77 0.78 0.73 0.87 0.58 0.56 0.58
Minimum correlation of possible factor scores  0.86 0.78 0.47 0.55 0.57 0.47 0.75 0.17 0.12 0.16
                                               MR11  MR6 MR12
Correlation of scores with factors             0.75 0.74 0.77
Multiple R square of scores with factors       0.57 0.54 0.60
Minimum correlation of possible factor scores  0.14 0.09 0.20
# examine eigenvalues and variance explained
efa_adult_max_rot_eigenvalues <- print(efa_adult_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR8   MR1   MR7   MR3   MR2   MR5   MR4  MR10  MR13   MR9  MR11   MR6  MR12   h2
angry           0.40  0.48  0.06  0.04  0.03  0.23  0.19  0.14 -0.04 -0.19 -0.12 -0.05 -0.11 0.57
beliefs         0.06  0.25  0.73  0.06  0.11  0.08  0.10  0.06  0.10 -0.06  0.09 -0.02 -0.12 0.68
calm            0.56  0.39  0.16  0.05  0.02  0.11  0.05  0.07  0.12 -0.09 -0.02 -0.01  0.14 0.56
choices         0.07  0.10  0.13  0.23  0.16  0.66 -0.03 -0.02 -0.07  0.14  0.04 -0.11 -0.05 0.59
communicating  -0.11  0.02  0.09  0.18  0.76  0.15  0.06  0.00  0.05 -0.04 -0.03  0.03 -0.02 0.67
computations   -0.71 -0.06  0.23  0.14  0.47  0.05  0.02  0.07 -0.11 -0.01 -0.12 -0.06 -0.01 0.84
conscious       0.27  0.03  0.18  0.34  0.00  0.44  0.01 -0.13  0.07  0.03 -0.07  0.03 -0.04 0.45
depressed       0.23  0.84  0.14  0.03  0.01  0.07  0.05  0.05  0.11  0.07 -0.08  0.01 -0.05 0.81
depth           0.05 -0.01  0.09  0.61  0.13  0.26  0.02 -0.11 -0.06  0.02  0.06  0.00 -0.04 0.48
desires         0.53  0.31  0.12  0.12 -0.02  0.16  0.06  0.10  0.01 -0.04  0.43 -0.02  0.00 0.63
disrespected    0.17  0.68  0.13  0.08  0.01  0.03  0.26 -0.08  0.08  0.02  0.05  0.00 -0.05 0.60
embarrassed     0.11  0.42  0.15 -0.02  0.06  0.02  0.77  0.11  0.01  0.06 -0.03  0.02  0.12 0.84
emo_recog      -0.05  0.25  0.54  0.10  0.10  0.14  0.05 -0.02  0.10  0.13 -0.07  0.24  0.02 0.49
fear            0.81  0.31  0.04  0.11 -0.01  0.04 -0.02  0.16 -0.10 -0.02 -0.13  0.20 -0.21 0.91
free_will       0.07  0.03  0.09  0.09  0.11  0.66  0.04  0.11  0.09 -0.09  0.05  0.03  0.02 0.51
goal            0.20  0.07  0.31  0.19  0.09  0.28  0.07  0.23 -0.02  0.00  0.12  0.02 -0.08 0.35
guilt           0.13  0.56  0.19  0.05  0.04  0.05  0.71 -0.09  0.02 -0.06  0.07 -0.03 -0.17 0.93
happy           0.34  0.79  0.17 -0.09  0.07  0.13 -0.03 -0.04  0.08 -0.01 -0.03  0.00 -0.03 0.81
hungry          0.85  0.08 -0.10  0.08 -0.35  0.02  0.06 -0.07  0.08  0.04  0.08 -0.01  0.06 0.89
intentions     -0.21  0.11  0.29  0.09  0.35  0.26  0.07  0.44  0.19 -0.03  0.04  0.00  0.01 0.59
joy             0.33  0.78  0.24 -0.02  0.08 -0.01  0.09  0.00 -0.11  0.06  0.07  0.06  0.17 0.84
love            0.25  0.69  0.30  0.11  0.02  0.08  0.12  0.02  0.02  0.18  0.20 -0.01 -0.01 0.74
morality       -0.12  0.25  0.45  0.13  0.23  0.08  0.05  0.23  0.02  0.12  0.00 -0.09 -0.04 0.43
nauseated       0.66  0.30  0.01  0.14  0.00  0.09 -0.02 -0.02 -0.09  0.07  0.15 -0.01  0.11 0.61
odors           0.60  0.01  0.02  0.31 -0.18  0.14  0.11 -0.10  0.09  0.05 -0.05  0.07  0.24 0.61
pain            0.85  0.17 -0.05  0.06 -0.05  0.02  0.08 -0.06  0.09 -0.03 -0.05 -0.14 -0.05 0.81
personality     0.04  0.31  0.56 -0.01  0.15  0.16  0.07 -0.07 -0.06 -0.05  0.05  0.02  0.14 0.50
pleasure        0.57  0.43  0.14  0.10 -0.02  0.00  0.08 -0.03 -0.12  0.44 -0.07 -0.01  0.02 0.76
pride           0.14  0.72  0.26  0.03  0.04  0.06  0.21  0.21 -0.03 -0.11  0.03  0.01  0.04 0.72
reasoning       0.06  0.09  0.14  0.20  0.36  0.52  0.03 -0.02  0.06 -0.07 -0.02  0.28  0.07 0.56
recognizing    -0.25  0.06  0.26  0.21  0.73  0.15  0.00  0.03 -0.04 -0.04 -0.01 -0.07  0.05 0.75
remembering    -0.23  0.11  0.12  0.25  0.56  0.23  0.00  0.11  0.12  0.21  0.12  0.04 -0.05 0.60
safe            0.70  0.24  0.18  0.15 -0.11  0.20 -0.01  0.00  0.13 -0.04  0.02  0.19 -0.11 0.72
seeing          0.18  0.01  0.00  0.63  0.11  0.19  0.05  0.02  0.09  0.07 -0.04 -0.05  0.00 0.50
self_aware      0.25  0.13  0.21  0.12  0.13  0.32  0.03  0.07  0.45 -0.04  0.02  0.04  0.00 0.47
self_restraint  0.04  0.28  0.44  0.09  0.09  0.26  0.05  0.02  0.05  0.00 -0.13 -0.16  0.07 0.42
sounds          0.12  0.06 -0.01  0.62  0.21  0.05 -0.03  0.11 -0.05 -0.04  0.04  0.12  0.02 0.48
temperature     0.13  0.02  0.13  0.73  0.07  0.02 -0.01  0.06  0.07 -0.02  0.00 -0.04  0.02 0.58
thoughts        0.28  0.25  0.25 -0.01  0.11  0.44  0.01  0.16  0.28  0.12 -0.10 -0.17  0.08 0.57
tired           0.74  0.23  0.05  0.21 -0.01  0.10  0.06  0.00 -0.03  0.01  0.01 -0.15 -0.04 0.69
                  u2 com
angry          0.427 3.9
beliefs        0.323 1.5
calm           0.445 2.5
choices        0.413 1.8
communicating  0.333 1.3
computations   0.155 2.3
conscious      0.545 3.5
depressed      0.191 1.3
depth          0.515 1.7
desires        0.370 3.3
disrespected   0.403 1.7
embarrassed    0.160 1.8
emo_recog      0.513 2.6
fear           0.087 1.8
free_will      0.492 1.3
goal           0.654 5.5
guilt          0.070 2.4
happy          0.189 1.6
hungry         0.112 1.5
intentions     0.415 4.9
joy            0.162 1.8
love           0.262 2.3
morality       0.570 3.7
nauseated      0.391 1.8
odors          0.391 2.5
pain           0.192 1.2
personality    0.501 2.3
pleasure       0.242 3.3
pride          0.282 1.9
reasoning      0.438 3.2
recognizing    0.251 1.9
remembering    0.396 3.3
safe           0.283 2.1
seeing         0.498 1.5
self_aware     0.529 3.7
self_restraint 0.582 3.5
sounds         0.519 1.6
temperature    0.423 1.2
thoughts       0.433 5.5
tired          0.313 1.5

                       MR8  MR1  MR7  MR3  MR2  MR5  MR4 MR10 MR13  MR9 MR11  MR6 MR12
SS loadings           6.47 5.37 2.53 2.41 2.36 2.33 1.36 0.57 0.55 0.46 0.42 0.38 0.32
Proportion Var        0.16 0.13 0.06 0.06 0.06 0.06 0.03 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var        0.16 0.30 0.36 0.42 0.48 0.54 0.57 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained  0.25 0.21 0.10 0.09 0.09 0.09 0.05 0.02 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion 0.25 0.46 0.56 0.66 0.75 0.84 0.89 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  2.5
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR8  MR1  MR7  MR3  MR2  MR5  MR4 MR10 MR13  MR9
Correlation of scores with factors             0.96 0.94 0.86 0.88 0.89 0.86 0.94 0.76 0.75 0.76
Multiple R square of scores with factors       0.93 0.89 0.73 0.77 0.78 0.73 0.87 0.58 0.56 0.58
Minimum correlation of possible factor scores  0.86 0.78 0.47 0.55 0.57 0.47 0.75 0.17 0.12 0.16
                                               MR11  MR6 MR12
Correlation of scores with factors             0.75 0.74 0.77
Multiple R square of scores with factors       0.57 0.54 0.60
Minimum correlation of possible factor scores  0.14 0.09 0.20
efa_adult_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_adult_small_rot <- fa(d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_adult_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR2   MR1   MR3   h2   u2 com
angry           0.51  0.38  0.15 0.43 0.57 2.0
beliefs         0.51 -0.03  0.33 0.37 0.63 1.7
calm            0.43  0.53  0.17 0.50 0.50 2.1
choices         0.14  0.08  0.57 0.35 0.65 1.2
communicating   0.14 -0.32  0.57 0.44 0.56 1.7
computations    0.05 -0.83  0.36 0.82 0.18 1.4
conscious       0.06  0.32  0.50 0.36 0.64 1.7
depressed       0.80  0.26  0.04 0.71 0.29 1.2
depth          -0.03  0.10  0.57 0.34 0.66 1.1
desires         0.36  0.53  0.19 0.45 0.55 2.0
disrespected    0.70  0.21  0.03 0.54 0.46 1.2
embarrassed     0.60  0.09  0.03 0.37 0.63 1.1
emo_recog       0.42 -0.09  0.31 0.28 0.72 1.9
fear            0.32  0.75  0.13 0.68 0.32 1.4
free_will       0.09  0.09  0.48 0.24 0.76 1.1
goal            0.21  0.16  0.42 0.25 0.75 1.8
guilt           0.69  0.14  0.06 0.50 0.50 1.1
happy           0.77  0.33  0.05 0.71 0.29 1.4
hungry          0.04  0.93 -0.08 0.88 0.12 1.0
intentions      0.28 -0.31  0.46 0.39 0.61 2.5
joy             0.81  0.30  0.02 0.75 0.25 1.3
love            0.76  0.27  0.14 0.66 0.34 1.3
morality        0.42 -0.20  0.34 0.34 0.66 2.4
nauseated       0.29  0.66  0.14 0.54 0.46 1.5
odors           0.01  0.67  0.21 0.50 0.50 1.2
pain            0.17  0.82  0.06 0.71 0.29 1.1
personality     0.50 -0.05  0.26 0.32 0.68 1.5
pleasure        0.47  0.55  0.08 0.53 0.47 2.0
pride           0.81  0.13  0.08 0.67 0.33 1.1
reasoning       0.16  0.00  0.59 0.38 0.62 1.1
recognizing     0.21 -0.45  0.61 0.61 0.39 2.1
remembering     0.19 -0.33  0.58 0.48 0.52 1.9
safe            0.28  0.71  0.23 0.64 0.36 1.5
seeing         -0.03  0.24  0.55 0.36 0.64 1.4
self_aware      0.21  0.23  0.41 0.27 0.73 2.2
self_restraint  0.42  0.00  0.34 0.29 0.71 1.9
sounds          0.01  0.13  0.50 0.27 0.73 1.1
temperature     0.00  0.19  0.51 0.30 0.70 1.3
thoughts        0.35  0.24  0.37 0.32 0.68 2.7
tired           0.24  0.73  0.22 0.63 0.37 1.4

                       MR2  MR1  MR3
SS loadings           7.11 7.09 4.97
Proportion Var        0.18 0.18 0.12
Cumulative Var        0.18 0.35 0.48
Proportion Explained  0.37 0.37 0.26
Cumulative Proportion 0.37 0.74 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 663  and the objective function was  6.63 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  196 with the empirical chi square  754.59  with prob <  0.0076 
The total number of observations was  200  with MLE Chi Square =  1211.29  with prob <  1.3e-34 

Tucker Lewis Index of factoring reliability =  0.848
RMSEA index =  0.07  and the 90 % confidence intervals are  0.059 NA
BIC =  -2301.5
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                MR2  MR1  MR3
Correlation of scores with factors             0.96 0.98 0.94
Multiple R square of scores with factors       0.93 0.95 0.88
Minimum correlation of possible factor scores  0.86 0.91 0.76
# examine eigenvalues and variance explained
efa_adult_small_rot_eigenvalues <- print(efa_adult_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR2   MR1   MR3   h2   u2 com
angry           0.51  0.38  0.15 0.43 0.57 2.0
beliefs         0.51 -0.03  0.33 0.37 0.63 1.7
calm            0.43  0.53  0.17 0.50 0.50 2.1
choices         0.14  0.08  0.57 0.35 0.65 1.2
communicating   0.14 -0.32  0.57 0.44 0.56 1.7
computations    0.05 -0.83  0.36 0.82 0.18 1.4
conscious       0.06  0.32  0.50 0.36 0.64 1.7
depressed       0.80  0.26  0.04 0.71 0.29 1.2
depth          -0.03  0.10  0.57 0.34 0.66 1.1
desires         0.36  0.53  0.19 0.45 0.55 2.0
disrespected    0.70  0.21  0.03 0.54 0.46 1.2
embarrassed     0.60  0.09  0.03 0.37 0.63 1.1
emo_recog       0.42 -0.09  0.31 0.28 0.72 1.9
fear            0.32  0.75  0.13 0.68 0.32 1.4
free_will       0.09  0.09  0.48 0.24 0.76 1.1
goal            0.21  0.16  0.42 0.25 0.75 1.8
guilt           0.69  0.14  0.06 0.50 0.50 1.1
happy           0.77  0.33  0.05 0.71 0.29 1.4
hungry          0.04  0.93 -0.08 0.88 0.12 1.0
intentions      0.28 -0.31  0.46 0.39 0.61 2.5
joy             0.81  0.30  0.02 0.75 0.25 1.3
love            0.76  0.27  0.14 0.66 0.34 1.3
morality        0.42 -0.20  0.34 0.34 0.66 2.4
nauseated       0.29  0.66  0.14 0.54 0.46 1.5
odors           0.01  0.67  0.21 0.50 0.50 1.2
pain            0.17  0.82  0.06 0.71 0.29 1.1
personality     0.50 -0.05  0.26 0.32 0.68 1.5
pleasure        0.47  0.55  0.08 0.53 0.47 2.0
pride           0.81  0.13  0.08 0.67 0.33 1.1
reasoning       0.16  0.00  0.59 0.38 0.62 1.1
recognizing     0.21 -0.45  0.61 0.61 0.39 2.1
remembering     0.19 -0.33  0.58 0.48 0.52 1.9
safe            0.28  0.71  0.23 0.64 0.36 1.5
seeing         -0.03  0.24  0.55 0.36 0.64 1.4
self_aware      0.21  0.23  0.41 0.27 0.73 2.2
self_restraint  0.42  0.00  0.34 0.29 0.71 1.9
sounds          0.01  0.13  0.50 0.27 0.73 1.1
temperature     0.00  0.19  0.51 0.30 0.70 1.3
thoughts        0.35  0.24  0.37 0.32 0.68 2.7
tired           0.24  0.73  0.22 0.63 0.37 1.4

                       MR2  MR1  MR3
SS loadings           7.11 7.09 4.97
Proportion Var        0.18 0.18 0.12
Cumulative Var        0.18 0.35 0.48
Proportion Explained  0.37 0.37 0.26
Cumulative Proportion 0.37 0.74 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 663  and the objective function was  6.63 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  196 with the empirical chi square  754.59  with prob <  0.0076 
The total number of observations was  200  with MLE Chi Square =  1211.29  with prob <  1.3e-34 

Tucker Lewis Index of factoring reliability =  0.848
RMSEA index =  0.07  and the 90 % confidence intervals are  0.059 NA
BIC =  -2301.5
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                MR2  MR1  MR3
Correlation of scores with factors             0.96 0.98 0.94
Multiple R square of scores with factors       0.93 0.95 0.88
Minimum correlation of possible factor scores  0.86 0.91 0.76
efa_adult_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_adult_small_rot_loadings <- efa_adult_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_adult_small_rot_items <- efa_adult_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_adult_small_rot_items$items, 40)
[1] "get hungry, do math (negative loading), feel pain, feel scared, feel tired, feel safe, smell things, feel sick, feel pleasure, feel calm, have desires"                                                                                                                                                             
[2] "feel joy, feel proud, feel sad, feel happy, feel love, get hurt feelings, feel guilty, feel embarrassed, get angry, have beliefs, have a personality, understand how somebody else is feeling, know what's nice and what's mean, have self-control"                                                                 
[3] "recognize somebody else, figure out how to do things, remember things, sense whether something is close by or far away, communicate with somebody else, make choices, see things, sense temperatures, hear sounds, be aware of things, decide what to do, make plans, have goals, be aware of itself, have thoughts"

Children alone

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_child_max_unrot <- fa(d3_child, nfactors = 13, rotate = "none", cor = cor_type)
efa_child_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR5   MR6   MR4   MR7   MR8   MR9  MR11  MR10  MR12  MR13   h2
angry           0.59 -0.05 -0.09  0.14 -0.04  0.05  0.15  0.06 -0.02 -0.04 -0.06 -0.06 -0.02 0.41
beliefs         0.47  0.32 -0.05  0.14 -0.03  0.08  0.11 -0.15 -0.04  0.16  0.03 -0.01  0.10 0.43
calm            0.55  0.04 -0.01 -0.04  0.04 -0.07 -0.08 -0.09 -0.02 -0.15  0.10  0.15  0.10 0.39
choices         0.41  0.09  0.23  0.44  0.06  0.05 -0.05 -0.20 -0.09  0.05 -0.14 -0.19  0.02 0.53
communicating   0.03  0.27  0.15 -0.14  0.32  0.00  0.05  0.05  0.30 -0.05 -0.01 -0.12 -0.09 0.34
computations   -0.16  0.79  0.08 -0.01 -0.04  0.08  0.09 -0.17  0.01 -0.12  0.05 -0.10  0.05 0.74
conscious       0.35  0.09  0.46 -0.07  0.31 -0.02  0.11  0.26 -0.13  0.00  0.14  0.07  0.05 0.57
depressed       0.70  0.04 -0.16 -0.05  0.08  0.05 -0.13  0.08  0.12 -0.21 -0.16 -0.08  0.05 0.64
depth           0.11  0.19  0.41 -0.11 -0.13  0.25  0.11 -0.11  0.06  0.08  0.12  0.20 -0.07 0.40
desires         0.53 -0.11 -0.10  0.09  0.15  0.00  0.11 -0.13  0.00  0.13 -0.02  0.15  0.14 0.42
disrespected    0.67  0.13 -0.14  0.11  0.06  0.12 -0.08  0.13 -0.12  0.07  0.14 -0.06 -0.03 0.59
embarrassed     0.50  0.16 -0.31  0.02  0.01  0.26  0.40  0.09 -0.08 -0.01 -0.07 -0.02  0.01 0.62
emo_recog       0.25  0.54  0.03 -0.05 -0.12  0.06  0.03  0.26  0.07  0.02  0.06 -0.10  0.02 0.46
fear            0.62 -0.29  0.04 -0.05  0.09 -0.10  0.10  0.07  0.24 -0.05 -0.21  0.22 -0.09 0.67
free_will       0.49  0.04  0.29  0.27  0.12  0.01 -0.08 -0.26 -0.06  0.11 -0.07  0.09 -0.06 0.51
goal            0.28  0.37  0.00  0.12  0.04 -0.07  0.04 -0.03  0.11 -0.16 -0.10  0.09  0.25 0.36
guilt           0.54  0.21 -0.16 -0.10 -0.06  0.22  0.27 -0.09 -0.08  0.06  0.08  0.16 -0.10 0.55
happy           0.69  0.25 -0.21 -0.16  0.21 -0.04 -0.07 -0.07 -0.02 -0.01  0.06 -0.06 -0.14 0.69
hungry          0.51 -0.70  0.12 -0.04 -0.06  0.15 -0.04 -0.02 -0.03  0.01 -0.04 -0.02 -0.02 0.80
intentions      0.27  0.44  0.20  0.25 -0.04  0.16 -0.06 -0.09 -0.11 -0.15 -0.03  0.06 -0.28 0.53
joy             0.68  0.17 -0.27 -0.10  0.15 -0.03 -0.13 -0.07  0.02  0.02  0.13 -0.11  0.01 0.65
love            0.58  0.16 -0.20 -0.14  0.02  0.16 -0.12  0.11 -0.13  0.12  0.05  0.05  0.04 0.51
morality        0.38  0.44 -0.04  0.00 -0.46 -0.10 -0.09  0.14  0.18  0.19  0.11  0.02 -0.06 0.68
nauseated       0.37 -0.38  0.02 -0.11 -0.15  0.23  0.09 -0.03  0.11 -0.01 -0.15 -0.07  0.05 0.41
odors           0.26 -0.55  0.29  0.04 -0.01  0.05  0.19 -0.14  0.22 -0.04  0.27 -0.13 -0.10 0.67
pain            0.56 -0.57  0.12  0.05 -0.07  0.09 -0.12 -0.02  0.00  0.11  0.05 -0.03  0.12 0.71
personality     0.48  0.37  0.03  0.17 -0.20  0.10  0.16  0.03  0.11 -0.02 -0.06 -0.05  0.19 0.52
pleasure        0.59  0.17 -0.17 -0.16  0.08 -0.22 -0.16 -0.21  0.06 -0.01  0.10  0.14  0.07 0.59
pride           0.63  0.31 -0.28 -0.08  0.01 -0.04  0.01 -0.01 -0.07 -0.03 -0.05 -0.01 -0.09 0.60
reasoning       0.18  0.27  0.34  0.06  0.21  0.00 -0.08  0.03  0.20  0.13 -0.01  0.09  0.18 0.37
recognizing     0.14  0.33  0.17 -0.06 -0.05  0.05  0.09 -0.06  0.29 -0.05  0.10  0.11  0.11 0.29
remembering    -0.03  0.55  0.24 -0.05  0.16  0.07 -0.07  0.01  0.14  0.29 -0.31 -0.11 -0.09 0.61
safe            0.64  0.00  0.32 -0.12 -0.19 -0.44  0.12 -0.03 -0.12 -0.03 -0.08 -0.07 -0.04 0.80
seeing         -0.09  0.08  0.21  0.11  0.16 -0.01 -0.14  0.16  0.13  0.19  0.13  0.02 -0.16 0.24
self_aware      0.24  0.19  0.46  0.17  0.15 -0.07  0.12  0.33 -0.18 -0.03  0.05  0.06  0.04 0.52
self_restraint  0.29  0.21  0.11  0.37 -0.17  0.13 -0.33  0.10  0.05 -0.25  0.02  0.16 -0.09 0.54
sounds         -0.08  0.03  0.33  0.09  0.19 -0.05  0.16 -0.05  0.17 -0.14  0.17 -0.13 -0.04 0.28
temperature    -0.09  0.27  0.54 -0.43 -0.08  0.29 -0.15 -0.09 -0.12 -0.06 -0.06  0.02  0.04 0.71
thoughts        0.57  0.10  0.18  0.05 -0.01 -0.11 -0.16  0.04 -0.03  0.00  0.09 -0.13  0.15 0.46
tired           0.45 -0.28  0.02 -0.11 -0.05  0.23 -0.10  0.21  0.09 -0.16 -0.04 -0.15 -0.01 0.45
                 u2 com
angry          0.59 1.4
beliefs        0.57 3.0
calm           0.61 1.7
choices        0.47 4.0
communicating  0.66 4.6
computations   0.26 1.4
conscious      0.43 4.3
depressed      0.36 1.7
depth          0.60 4.4
desires        0.58 2.2
disrespected   0.41 1.7
embarrassed    0.38 3.8
emo_recog      0.54 2.3
fear           0.33 2.7
free_will      0.49 3.6
goal           0.64 4.3
guilt          0.45 3.2
happy          0.31 2.0
hungry         0.20 2.1
intentions     0.47 4.9
joy            0.35 1.9
love           0.49 2.2
morality       0.32 4.3
nauseated      0.59 4.0
odors          0.33 3.8
pain           0.29 2.5
personality    0.48 3.7
pleasure       0.41 2.7
pride          0.40 2.0
reasoning      0.63 5.6
recognizing    0.71 4.2
remembering    0.39 3.4
safe           0.20 3.0
seeing         0.76 8.8
self_aware     0.48 4.4
self_restraint 0.46 6.4
sounds         0.72 5.0
temperature    0.29 3.7
thoughts       0.54 1.9
tired          0.55 4.0

                       MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11 MR10 MR12 MR13
SS loadings           8.10 4.24 2.16 1.00 0.89 0.82 0.78 0.70 0.64 0.53 0.52 0.46 0.44
Proportion Var        0.20 0.11 0.05 0.02 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.20 0.31 0.36 0.39 0.41 0.43 0.45 0.47 0.48 0.50 0.51 0.52 0.53
Proportion Explained  0.38 0.20 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.02 0.02 0.02
Cumulative Proportion 0.38 0.58 0.68 0.73 0.77 0.81 0.85 0.88 0.91 0.93 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11
Correlation of scores with factors             0.98 0.96 0.92 0.84 0.83 0.84 0.81 0.78 0.76 0.73
Multiple R square of scores with factors       0.95 0.93 0.84 0.70 0.68 0.71 0.65 0.61 0.58 0.54
Minimum correlation of possible factor scores  0.91 0.85 0.69 0.41 0.37 0.42 0.30 0.22 0.17 0.08
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.69
Multiple R square of scores with factors       0.56 0.50  0.48
Minimum correlation of possible factor scores  0.12 0.00 -0.05
# examine eigenvalues and variance explained
efa_child_max_unrot_eigenvalues <- print(efa_child_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR5   MR6   MR4   MR7   MR8   MR9  MR11  MR10  MR12  MR13   h2
angry           0.59 -0.05 -0.09  0.14 -0.04  0.05  0.15  0.06 -0.02 -0.04 -0.06 -0.06 -0.02 0.41
beliefs         0.47  0.32 -0.05  0.14 -0.03  0.08  0.11 -0.15 -0.04  0.16  0.03 -0.01  0.10 0.43
calm            0.55  0.04 -0.01 -0.04  0.04 -0.07 -0.08 -0.09 -0.02 -0.15  0.10  0.15  0.10 0.39
choices         0.41  0.09  0.23  0.44  0.06  0.05 -0.05 -0.20 -0.09  0.05 -0.14 -0.19  0.02 0.53
communicating   0.03  0.27  0.15 -0.14  0.32  0.00  0.05  0.05  0.30 -0.05 -0.01 -0.12 -0.09 0.34
computations   -0.16  0.79  0.08 -0.01 -0.04  0.08  0.09 -0.17  0.01 -0.12  0.05 -0.10  0.05 0.74
conscious       0.35  0.09  0.46 -0.07  0.31 -0.02  0.11  0.26 -0.13  0.00  0.14  0.07  0.05 0.57
depressed       0.70  0.04 -0.16 -0.05  0.08  0.05 -0.13  0.08  0.12 -0.21 -0.16 -0.08  0.05 0.64
depth           0.11  0.19  0.41 -0.11 -0.13  0.25  0.11 -0.11  0.06  0.08  0.12  0.20 -0.07 0.40
desires         0.53 -0.11 -0.10  0.09  0.15  0.00  0.11 -0.13  0.00  0.13 -0.02  0.15  0.14 0.42
disrespected    0.67  0.13 -0.14  0.11  0.06  0.12 -0.08  0.13 -0.12  0.07  0.14 -0.06 -0.03 0.59
embarrassed     0.50  0.16 -0.31  0.02  0.01  0.26  0.40  0.09 -0.08 -0.01 -0.07 -0.02  0.01 0.62
emo_recog       0.25  0.54  0.03 -0.05 -0.12  0.06  0.03  0.26  0.07  0.02  0.06 -0.10  0.02 0.46
fear            0.62 -0.29  0.04 -0.05  0.09 -0.10  0.10  0.07  0.24 -0.05 -0.21  0.22 -0.09 0.67
free_will       0.49  0.04  0.29  0.27  0.12  0.01 -0.08 -0.26 -0.06  0.11 -0.07  0.09 -0.06 0.51
goal            0.28  0.37  0.00  0.12  0.04 -0.07  0.04 -0.03  0.11 -0.16 -0.10  0.09  0.25 0.36
guilt           0.54  0.21 -0.16 -0.10 -0.06  0.22  0.27 -0.09 -0.08  0.06  0.08  0.16 -0.10 0.55
happy           0.69  0.25 -0.21 -0.16  0.21 -0.04 -0.07 -0.07 -0.02 -0.01  0.06 -0.06 -0.14 0.69
hungry          0.51 -0.70  0.12 -0.04 -0.06  0.15 -0.04 -0.02 -0.03  0.01 -0.04 -0.02 -0.02 0.80
intentions      0.27  0.44  0.20  0.25 -0.04  0.16 -0.06 -0.09 -0.11 -0.15 -0.03  0.06 -0.28 0.53
joy             0.68  0.17 -0.27 -0.10  0.15 -0.03 -0.13 -0.07  0.02  0.02  0.13 -0.11  0.01 0.65
love            0.58  0.16 -0.20 -0.14  0.02  0.16 -0.12  0.11 -0.13  0.12  0.05  0.05  0.04 0.51
morality        0.38  0.44 -0.04  0.00 -0.46 -0.10 -0.09  0.14  0.18  0.19  0.11  0.02 -0.06 0.68
nauseated       0.37 -0.38  0.02 -0.11 -0.15  0.23  0.09 -0.03  0.11 -0.01 -0.15 -0.07  0.05 0.41
odors           0.26 -0.55  0.29  0.04 -0.01  0.05  0.19 -0.14  0.22 -0.04  0.27 -0.13 -0.10 0.67
pain            0.56 -0.57  0.12  0.05 -0.07  0.09 -0.12 -0.02  0.00  0.11  0.05 -0.03  0.12 0.71
personality     0.48  0.37  0.03  0.17 -0.20  0.10  0.16  0.03  0.11 -0.02 -0.06 -0.05  0.19 0.52
pleasure        0.59  0.17 -0.17 -0.16  0.08 -0.22 -0.16 -0.21  0.06 -0.01  0.10  0.14  0.07 0.59
pride           0.63  0.31 -0.28 -0.08  0.01 -0.04  0.01 -0.01 -0.07 -0.03 -0.05 -0.01 -0.09 0.60
reasoning       0.18  0.27  0.34  0.06  0.21  0.00 -0.08  0.03  0.20  0.13 -0.01  0.09  0.18 0.37
recognizing     0.14  0.33  0.17 -0.06 -0.05  0.05  0.09 -0.06  0.29 -0.05  0.10  0.11  0.11 0.29
remembering    -0.03  0.55  0.24 -0.05  0.16  0.07 -0.07  0.01  0.14  0.29 -0.31 -0.11 -0.09 0.61
safe            0.64  0.00  0.32 -0.12 -0.19 -0.44  0.12 -0.03 -0.12 -0.03 -0.08 -0.07 -0.04 0.80
seeing         -0.09  0.08  0.21  0.11  0.16 -0.01 -0.14  0.16  0.13  0.19  0.13  0.02 -0.16 0.24
self_aware      0.24  0.19  0.46  0.17  0.15 -0.07  0.12  0.33 -0.18 -0.03  0.05  0.06  0.04 0.52
self_restraint  0.29  0.21  0.11  0.37 -0.17  0.13 -0.33  0.10  0.05 -0.25  0.02  0.16 -0.09 0.54
sounds         -0.08  0.03  0.33  0.09  0.19 -0.05  0.16 -0.05  0.17 -0.14  0.17 -0.13 -0.04 0.28
temperature    -0.09  0.27  0.54 -0.43 -0.08  0.29 -0.15 -0.09 -0.12 -0.06 -0.06  0.02  0.04 0.71
thoughts        0.57  0.10  0.18  0.05 -0.01 -0.11 -0.16  0.04 -0.03  0.00  0.09 -0.13  0.15 0.46
tired           0.45 -0.28  0.02 -0.11 -0.05  0.23 -0.10  0.21  0.09 -0.16 -0.04 -0.15 -0.01 0.45
                 u2 com
angry          0.59 1.4
beliefs        0.57 3.0
calm           0.61 1.7
choices        0.47 4.0
communicating  0.66 4.6
computations   0.26 1.4
conscious      0.43 4.3
depressed      0.36 1.7
depth          0.60 4.4
desires        0.58 2.2
disrespected   0.41 1.7
embarrassed    0.38 3.8
emo_recog      0.54 2.3
fear           0.33 2.7
free_will      0.49 3.6
goal           0.64 4.3
guilt          0.45 3.2
happy          0.31 2.0
hungry         0.20 2.1
intentions     0.47 4.9
joy            0.35 1.9
love           0.49 2.2
morality       0.32 4.3
nauseated      0.59 4.0
odors          0.33 3.8
pain           0.29 2.5
personality    0.48 3.7
pleasure       0.41 2.7
pride          0.40 2.0
reasoning      0.63 5.6
recognizing    0.71 4.2
remembering    0.39 3.4
safe           0.20 3.0
seeing         0.76 8.8
self_aware     0.48 4.4
self_restraint 0.46 6.4
sounds         0.72 5.0
temperature    0.29 3.7
thoughts       0.54 1.9
tired          0.55 4.0

                       MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11 MR10 MR12 MR13
SS loadings           8.10 4.24 2.16 1.00 0.89 0.82 0.78 0.70 0.64 0.53 0.52 0.46 0.44
Proportion Var        0.20 0.11 0.05 0.02 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.20 0.31 0.36 0.39 0.41 0.43 0.45 0.47 0.48 0.50 0.51 0.52 0.53
Proportion Explained  0.38 0.20 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.02 0.02 0.02
Cumulative Proportion 0.38 0.58 0.68 0.73 0.77 0.81 0.85 0.88 0.91 0.93 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11
Correlation of scores with factors             0.98 0.96 0.92 0.84 0.83 0.84 0.81 0.78 0.76 0.73
Multiple R square of scores with factors       0.95 0.93 0.84 0.70 0.68 0.71 0.65 0.61 0.58 0.54
Minimum correlation of possible factor scores  0.91 0.85 0.69 0.41 0.37 0.42 0.30 0.22 0.17 0.08
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.69
Multiple R square of scores with factors       0.56 0.50  0.48
Minimum correlation of possible factor scores  0.12 0.00 -0.05
# count factors with eigenvalues > 1 and variance explained > 5%
efa_child_max_unrot_nfactors <- efa_child_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_child_max_unrot_nfactors
[1] 3
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_child_max_unrot_loadings <- fa.sort(loadings(efa_child_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_child_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA))))
efa_child_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1
# reset as needed
efa_child_max_unrot_nfactors <- efa_child_max_unrot_loadings %>% count(factorName) %>% nrow()

Maximal (13-factor) rotated solution

# do factor analysis
efa_child_max_rot <- fa(d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
efa_child_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR5   MR8   MR6   MR3   MR7  MR12  MR10  MR13   MR9   MR4  MR11   h2
angry           0.35  0.31  0.19  0.11  0.14 -0.14  0.28  0.11 -0.01  0.02  0.01  0.06  0.11 0.41
beliefs         0.39 -0.05  0.35  0.04  0.21  0.07  0.27 -0.01 -0.02  0.16 -0.03 -0.03  0.01 0.43
calm            0.50  0.16  0.07  0.11  0.01  0.06  0.00  0.12 -0.14  0.19  0.03  0.09  0.09 0.39
choices         0.15  0.12  0.65  0.13  0.05 -0.04  0.04  0.18  0.07  0.03  0.07 -0.03  0.04 0.53
communicating   0.12 -0.12 -0.08  0.09  0.00  0.07  0.00 -0.02  0.41  0.12  0.32 -0.01 -0.08 0.34
computations    0.06 -0.67  0.10 -0.02  0.23  0.29  0.10  0.11  0.17  0.12  0.18 -0.12  0.16 0.74
conscious       0.20  0.12  0.05  0.65 -0.04  0.19  0.04 -0.02  0.07  0.08  0.16  0.02 -0.11 0.57
depressed       0.59  0.34  0.05  0.05  0.08 -0.11  0.07  0.22  0.21  0.13 -0.03 -0.01  0.20 0.64
depth          -0.03  0.03  0.08  0.11  0.12  0.53  0.16  0.07 -0.02  0.12  0.11  0.07 -0.14 0.40
desires         0.39  0.26  0.24  0.06 -0.08 -0.09  0.21 -0.10 -0.09  0.24 -0.05  0.08 -0.04 0.42
disrespected    0.59  0.18  0.18  0.19  0.17 -0.07  0.21  0.15 -0.03 -0.05 -0.07 -0.13 -0.08 0.59
embarrassed     0.37  0.10  0.04  0.06  0.11 -0.07  0.64  0.00  0.05  0.02 -0.05 -0.06  0.17 0.62
emo_recog       0.25 -0.21 -0.04  0.20  0.46  0.11  0.16  0.13  0.20  0.06  0.00 -0.10  0.02 0.46
fear            0.32  0.55  0.00  0.11 -0.05 -0.11  0.15  0.08  0.11  0.22  0.01  0.38 -0.02 0.67
free_will       0.27  0.17  0.54  0.14 -0.06  0.13  0.03  0.15  0.01  0.12  0.04  0.15 -0.12 0.51
goal            0.25 -0.15  0.14  0.11  0.12 -0.03  0.08  0.14  0.08  0.39  0.02  0.02  0.19 0.36
guilt           0.47  0.08  0.06  0.00  0.11  0.19  0.51  0.02 -0.07  0.04 -0.03  0.08  0.01 0.55
happy           0.79  0.05  0.08  0.05  0.05  0.00  0.14  0.05  0.15 -0.03  0.05  0.07  0.00 0.69
hungry          0.15  0.84  0.12  0.04 -0.13  0.01  0.01 -0.02 -0.16 -0.11 -0.03  0.05  0.02 0.80
intentions      0.19 -0.20  0.31  0.11  0.09  0.23  0.18  0.48  0.09 -0.06  0.07  0.09 -0.03 0.53
joy             0.77  0.12  0.10  0.00  0.11 -0.08  0.07  0.01  0.05  0.03  0.02 -0.06  0.01 0.65
love            0.59  0.14  0.02  0.10  0.13  0.08  0.18  0.04  0.02  0.00 -0.24 -0.11 -0.03 0.51
morality        0.31 -0.09  0.03 -0.03  0.70  0.10  0.06  0.15  0.01  0.09 -0.11  0.13 -0.12 0.68
nauseated       0.08  0.59  0.04 -0.09  0.03  0.07  0.15 -0.04  0.02  0.02 -0.03  0.00  0.14 0.41
odors          -0.05  0.61  0.10  0.01 -0.03  0.04  0.01 -0.09 -0.20 -0.05  0.47  0.07 -0.10 0.67
pain            0.22  0.75  0.22  0.07 -0.01 -0.02 -0.07 -0.04 -0.20  0.02 -0.06 -0.02 -0.05 0.71
personality     0.27  0.02  0.25  0.10  0.41  0.05  0.28  0.15  0.07  0.27  0.01 -0.04  0.17 0.52
pleasure        0.70  0.04  0.07 -0.04  0.05  0.02 -0.08 -0.01 -0.06  0.21 -0.01  0.18  0.01 0.59
pride           0.67 -0.01  0.08  0.02  0.17 -0.05  0.24  0.11  0.09  0.00 -0.09  0.11  0.11 0.60
reasoning       0.10 -0.04  0.19  0.26  0.07  0.17 -0.09  0.02  0.21  0.36  0.08 -0.03 -0.18 0.37
recognizing     0.11 -0.10 -0.01  0.02  0.22  0.23  0.07  0.06  0.08  0.34  0.19  0.03 -0.02 0.29
remembering     0.01 -0.31  0.22  0.08  0.16  0.22  0.01 -0.03  0.59  0.08 -0.07  0.02 -0.15 0.61
safe            0.37  0.26  0.24  0.34  0.29  0.08 -0.09 -0.06 -0.05 -0.04  0.08  0.51  0.23 0.80
seeing         -0.08 -0.07  0.03  0.16  0.04  0.01 -0.11  0.06  0.13 -0.02  0.09 -0.03 -0.40 0.24
self_aware      0.02 -0.02  0.15  0.67  0.09  0.07  0.06  0.13  0.04  0.06  0.07  0.05 -0.06 0.52
self_restraint  0.15  0.04  0.17  0.08  0.17  0.03 -0.04  0.65 -0.06  0.13 -0.05 -0.04 -0.06 0.54
sounds         -0.13 -0.03  0.07  0.17 -0.04  0.05 -0.05  0.00  0.06  0.06  0.46  0.00 -0.04 0.28
temperature    -0.08 -0.07 -0.03  0.16  0.01  0.76 -0.16  0.03  0.20 -0.02 -0.03 -0.07  0.12 0.71
thoughts        0.43  0.20  0.25  0.28  0.24  0.03 -0.13  0.07 -0.01  0.09  0.05 -0.02  0.05 0.46
tired           0.23  0.55 -0.09  0.08  0.07  0.01  0.04  0.16  0.10 -0.07  0.01 -0.13  0.11 0.45
                 u2 com
angry          0.59 5.1
beliefs        0.57 4.0
calm           0.61 2.3
choices        0.47 1.6
communicating  0.66 2.9
computations   0.26 2.6
conscious      0.43 1.8
depressed      0.36 2.9
depth          0.60 2.0
desires        0.58 5.0
disrespected   0.41 2.6
embarrassed    0.38 2.1
emo_recog      0.54 4.0
fear           0.33 3.5
free_will      0.49 2.8
goal           0.64 4.2
guilt          0.45 2.6
happy          0.31 1.2
hungry         0.20 1.3
intentions     0.47 4.1
joy            0.35 1.2
love           0.49 2.0
morality       0.32 1.9
nauseated      0.59 1.4
odors          0.33 2.4
pain           0.29 1.6
personality    0.48 5.4
pleasure       0.41 1.4
pride          0.40 1.7
reasoning      0.63 5.1
recognizing    0.71 4.3
remembering    0.39 2.7
safe           0.20 5.5
seeing         0.76 2.2
self_aware     0.48 1.4
self_restraint 0.46 1.6
sounds         0.72 1.7
temperature    0.29 1.5
thoughts       0.54 4.2
tired          0.55 2.1

                       MR1  MR2  MR5  MR8  MR6  MR3  MR7 MR12 MR10 MR13  MR9  MR4 MR11
SS loadings           5.37 3.84 1.55 1.48 1.44 1.36 1.35 1.01 0.98 0.85 0.78 0.63 0.62
Proportion Var        0.13 0.10 0.04 0.04 0.04 0.03 0.03 0.03 0.02 0.02 0.02 0.02 0.02
Cumulative Var        0.13 0.23 0.27 0.31 0.34 0.38 0.41 0.44 0.46 0.48 0.50 0.52 0.53
Proportion Explained  0.25 0.18 0.07 0.07 0.07 0.06 0.06 0.05 0.05 0.04 0.04 0.03 0.03
Cumulative Proportion 0.25 0.43 0.51 0.58 0.64 0.71 0.77 0.82 0.86 0.90 0.94 0.97 1.00

Mean item complexity =  2.7
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR5  MR8  MR6  MR3  MR7 MR12 MR10 MR13
Correlation of scores with factors             0.93 0.94 0.82 0.83 0.83 0.86 0.83 0.78 0.78 0.73
Multiple R square of scores with factors       0.86 0.88 0.67 0.69 0.68 0.74 0.68 0.61 0.61 0.54
Minimum correlation of possible factor scores  0.72 0.76 0.34 0.38 0.36 0.47 0.37 0.23 0.23 0.08
                                                MR9  MR4 MR11
Correlation of scores with factors             0.77 0.79 0.75
Multiple R square of scores with factors       0.59 0.62 0.56
Minimum correlation of possible factor scores  0.19 0.24 0.12
# examine eigenvalues and variance explained
efa_child_max_rot_eigenvalues <- print(efa_child_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR5   MR8   MR6   MR3   MR7  MR12  MR10  MR13   MR9   MR4  MR11   h2
angry           0.35  0.31  0.19  0.11  0.14 -0.14  0.28  0.11 -0.01  0.02  0.01  0.06  0.11 0.41
beliefs         0.39 -0.05  0.35  0.04  0.21  0.07  0.27 -0.01 -0.02  0.16 -0.03 -0.03  0.01 0.43
calm            0.50  0.16  0.07  0.11  0.01  0.06  0.00  0.12 -0.14  0.19  0.03  0.09  0.09 0.39
choices         0.15  0.12  0.65  0.13  0.05 -0.04  0.04  0.18  0.07  0.03  0.07 -0.03  0.04 0.53
communicating   0.12 -0.12 -0.08  0.09  0.00  0.07  0.00 -0.02  0.41  0.12  0.32 -0.01 -0.08 0.34
computations    0.06 -0.67  0.10 -0.02  0.23  0.29  0.10  0.11  0.17  0.12  0.18 -0.12  0.16 0.74
conscious       0.20  0.12  0.05  0.65 -0.04  0.19  0.04 -0.02  0.07  0.08  0.16  0.02 -0.11 0.57
depressed       0.59  0.34  0.05  0.05  0.08 -0.11  0.07  0.22  0.21  0.13 -0.03 -0.01  0.20 0.64
depth          -0.03  0.03  0.08  0.11  0.12  0.53  0.16  0.07 -0.02  0.12  0.11  0.07 -0.14 0.40
desires         0.39  0.26  0.24  0.06 -0.08 -0.09  0.21 -0.10 -0.09  0.24 -0.05  0.08 -0.04 0.42
disrespected    0.59  0.18  0.18  0.19  0.17 -0.07  0.21  0.15 -0.03 -0.05 -0.07 -0.13 -0.08 0.59
embarrassed     0.37  0.10  0.04  0.06  0.11 -0.07  0.64  0.00  0.05  0.02 -0.05 -0.06  0.17 0.62
emo_recog       0.25 -0.21 -0.04  0.20  0.46  0.11  0.16  0.13  0.20  0.06  0.00 -0.10  0.02 0.46
fear            0.32  0.55  0.00  0.11 -0.05 -0.11  0.15  0.08  0.11  0.22  0.01  0.38 -0.02 0.67
free_will       0.27  0.17  0.54  0.14 -0.06  0.13  0.03  0.15  0.01  0.12  0.04  0.15 -0.12 0.51
goal            0.25 -0.15  0.14  0.11  0.12 -0.03  0.08  0.14  0.08  0.39  0.02  0.02  0.19 0.36
guilt           0.47  0.08  0.06  0.00  0.11  0.19  0.51  0.02 -0.07  0.04 -0.03  0.08  0.01 0.55
happy           0.79  0.05  0.08  0.05  0.05  0.00  0.14  0.05  0.15 -0.03  0.05  0.07  0.00 0.69
hungry          0.15  0.84  0.12  0.04 -0.13  0.01  0.01 -0.02 -0.16 -0.11 -0.03  0.05  0.02 0.80
intentions      0.19 -0.20  0.31  0.11  0.09  0.23  0.18  0.48  0.09 -0.06  0.07  0.09 -0.03 0.53
joy             0.77  0.12  0.10  0.00  0.11 -0.08  0.07  0.01  0.05  0.03  0.02 -0.06  0.01 0.65
love            0.59  0.14  0.02  0.10  0.13  0.08  0.18  0.04  0.02  0.00 -0.24 -0.11 -0.03 0.51
morality        0.31 -0.09  0.03 -0.03  0.70  0.10  0.06  0.15  0.01  0.09 -0.11  0.13 -0.12 0.68
nauseated       0.08  0.59  0.04 -0.09  0.03  0.07  0.15 -0.04  0.02  0.02 -0.03  0.00  0.14 0.41
odors          -0.05  0.61  0.10  0.01 -0.03  0.04  0.01 -0.09 -0.20 -0.05  0.47  0.07 -0.10 0.67
pain            0.22  0.75  0.22  0.07 -0.01 -0.02 -0.07 -0.04 -0.20  0.02 -0.06 -0.02 -0.05 0.71
personality     0.27  0.02  0.25  0.10  0.41  0.05  0.28  0.15  0.07  0.27  0.01 -0.04  0.17 0.52
pleasure        0.70  0.04  0.07 -0.04  0.05  0.02 -0.08 -0.01 -0.06  0.21 -0.01  0.18  0.01 0.59
pride           0.67 -0.01  0.08  0.02  0.17 -0.05  0.24  0.11  0.09  0.00 -0.09  0.11  0.11 0.60
reasoning       0.10 -0.04  0.19  0.26  0.07  0.17 -0.09  0.02  0.21  0.36  0.08 -0.03 -0.18 0.37
recognizing     0.11 -0.10 -0.01  0.02  0.22  0.23  0.07  0.06  0.08  0.34  0.19  0.03 -0.02 0.29
remembering     0.01 -0.31  0.22  0.08  0.16  0.22  0.01 -0.03  0.59  0.08 -0.07  0.02 -0.15 0.61
safe            0.37  0.26  0.24  0.34  0.29  0.08 -0.09 -0.06 -0.05 -0.04  0.08  0.51  0.23 0.80
seeing         -0.08 -0.07  0.03  0.16  0.04  0.01 -0.11  0.06  0.13 -0.02  0.09 -0.03 -0.40 0.24
self_aware      0.02 -0.02  0.15  0.67  0.09  0.07  0.06  0.13  0.04  0.06  0.07  0.05 -0.06 0.52
self_restraint  0.15  0.04  0.17  0.08  0.17  0.03 -0.04  0.65 -0.06  0.13 -0.05 -0.04 -0.06 0.54
sounds         -0.13 -0.03  0.07  0.17 -0.04  0.05 -0.05  0.00  0.06  0.06  0.46  0.00 -0.04 0.28
temperature    -0.08 -0.07 -0.03  0.16  0.01  0.76 -0.16  0.03  0.20 -0.02 -0.03 -0.07  0.12 0.71
thoughts        0.43  0.20  0.25  0.28  0.24  0.03 -0.13  0.07 -0.01  0.09  0.05 -0.02  0.05 0.46
tired           0.23  0.55 -0.09  0.08  0.07  0.01  0.04  0.16  0.10 -0.07  0.01 -0.13  0.11 0.45
                 u2 com
angry          0.59 5.1
beliefs        0.57 4.0
calm           0.61 2.3
choices        0.47 1.6
communicating  0.66 2.9
computations   0.26 2.6
conscious      0.43 1.8
depressed      0.36 2.9
depth          0.60 2.0
desires        0.58 5.0
disrespected   0.41 2.6
embarrassed    0.38 2.1
emo_recog      0.54 4.0
fear           0.33 3.5
free_will      0.49 2.8
goal           0.64 4.2
guilt          0.45 2.6
happy          0.31 1.2
hungry         0.20 1.3
intentions     0.47 4.1
joy            0.35 1.2
love           0.49 2.0
morality       0.32 1.9
nauseated      0.59 1.4
odors          0.33 2.4
pain           0.29 1.6
personality    0.48 5.4
pleasure       0.41 1.4
pride          0.40 1.7
reasoning      0.63 5.1
recognizing    0.71 4.3
remembering    0.39 2.7
safe           0.20 5.5
seeing         0.76 2.2
self_aware     0.48 1.4
self_restraint 0.46 1.6
sounds         0.72 1.7
temperature    0.29 1.5
thoughts       0.54 4.2
tired          0.55 2.1

                       MR1  MR2  MR5  MR8  MR6  MR3  MR7 MR12 MR10 MR13  MR9  MR4 MR11
SS loadings           5.37 3.84 1.55 1.48 1.44 1.36 1.35 1.01 0.98 0.85 0.78 0.63 0.62
Proportion Var        0.13 0.10 0.04 0.04 0.04 0.03 0.03 0.03 0.02 0.02 0.02 0.02 0.02
Cumulative Var        0.13 0.23 0.27 0.31 0.34 0.38 0.41 0.44 0.46 0.48 0.50 0.52 0.53
Proportion Explained  0.25 0.18 0.07 0.07 0.07 0.06 0.06 0.05 0.05 0.04 0.04 0.03 0.03
Cumulative Proportion 0.25 0.43 0.51 0.58 0.64 0.71 0.77 0.82 0.86 0.90 0.94 0.97 1.00

Mean item complexity =  2.7
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR5  MR8  MR6  MR3  MR7 MR12 MR10 MR13
Correlation of scores with factors             0.93 0.94 0.82 0.83 0.83 0.86 0.83 0.78 0.78 0.73
Multiple R square of scores with factors       0.86 0.88 0.67 0.69 0.68 0.74 0.68 0.61 0.61 0.54
Minimum correlation of possible factor scores  0.72 0.76 0.34 0.38 0.36 0.47 0.37 0.23 0.23 0.08
                                                MR9  MR4 MR11
Correlation of scores with factors             0.77 0.79 0.75
Multiple R square of scores with factors       0.59 0.62 0.56
Minimum correlation of possible factor scores  0.19 0.24 0.12
efa_child_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_child_small_rot <- fa(d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_child_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3    h2   u2 com
angry           0.50  0.31  0.05 0.350 0.65 1.7
beliefs         0.53 -0.04  0.22 0.329 0.67 1.3
calm            0.48  0.22  0.13 0.298 0.70 1.6
choices         0.28  0.19  0.36 0.241 0.76 2.4
communicating   0.08 -0.18  0.24 0.099 0.90 2.1
computations    0.14 -0.71  0.34 0.637 0.36 1.5
conscious       0.17  0.20  0.49 0.309 0.69 1.6
depressed       0.66  0.27  0.02 0.505 0.50 1.3
depth           0.02  0.01  0.44 0.198 0.80 1.0
desires         0.43  0.33  0.03 0.296 0.70 1.9
disrespected    0.67  0.19  0.10 0.488 0.51 1.2
embarrassed     0.57  0.04 -0.06 0.329 0.67 1.0
emo_recog       0.40 -0.31  0.28 0.340 0.66 2.7
fear            0.39  0.53  0.06 0.438 0.56 1.9
free_will       0.31  0.28  0.40 0.338 0.66 2.7
goal            0.37 -0.17  0.22 0.218 0.78 2.1
guilt           0.59  0.06  0.06 0.352 0.65 1.0
happy           0.76  0.07  0.04 0.582 0.42 1.0
hungry          0.12  0.87 -0.07 0.776 0.22 1.1
intentions      0.32 -0.18  0.41 0.297 0.70 2.3
joy             0.75  0.12 -0.04 0.577 0.42 1.1
love            0.63  0.11  0.00 0.414 0.59 1.1
morality        0.47 -0.18  0.20 0.293 0.71 1.7
nauseated       0.16  0.51 -0.06 0.287 0.71 1.2
odors          -0.10  0.63  0.11 0.425 0.58 1.1
pain            0.21  0.79  0.01 0.664 0.34 1.1
personality     0.51 -0.06  0.30 0.359 0.64 1.7
pleasure        0.62  0.09  0.02 0.394 0.61 1.0
pride           0.77 -0.03 -0.02 0.602 0.40 1.0
reasoning       0.12 -0.04  0.49 0.259 0.74 1.1
recognizing     0.18 -0.17  0.32 0.160 0.84 2.1
remembering     0.10 -0.40  0.39 0.317 0.68 2.1
safe            0.42  0.33  0.31 0.380 0.62 2.8
seeing         -0.13 -0.05  0.23 0.072 0.93 1.7
self_aware      0.11  0.06  0.52 0.288 0.71 1.1
self_restraint  0.26  0.02  0.28 0.146 0.85 2.0
sounds         -0.17  0.01  0.33 0.139 0.86 1.5
temperature    -0.12 -0.13  0.42 0.211 0.79 1.4
thoughts        0.46  0.24  0.32 0.367 0.63 2.4
tired           0.27  0.46 -0.01 0.286 0.71 1.6

                       MR1  MR2  MR3
SS loadings           7.03 4.20 2.83
Proportion Var        0.18 0.10 0.07
Cumulative Var        0.18 0.28 0.35
Proportion Explained  0.50 0.30 0.20
Cumulative Proportion 0.50 0.80 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 663  and the objective function was  4.8 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  198 with the empirical chi square  808.39  with prob <  8.8e-05 
The total number of observations was  200  with MLE Chi Square =  877.46  with prob <  3.9e-08 

Tucker Lewis Index of factoring reliability =  0.892
RMSEA index =  0.047  and the 90 % confidence intervals are  0.033 0.047
BIC =  -2635.32
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.95 0.88
Multiple R square of scores with factors       0.91 0.90 0.78
Minimum correlation of possible factor scores  0.83 0.80 0.55
# examine eigenvalues and variance explained
efa_child_small_rot_eigenvalues <- print(efa_child_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3    h2   u2 com
angry           0.50  0.31  0.05 0.350 0.65 1.7
beliefs         0.53 -0.04  0.22 0.329 0.67 1.3
calm            0.48  0.22  0.13 0.298 0.70 1.6
choices         0.28  0.19  0.36 0.241 0.76 2.4
communicating   0.08 -0.18  0.24 0.099 0.90 2.1
computations    0.14 -0.71  0.34 0.637 0.36 1.5
conscious       0.17  0.20  0.49 0.309 0.69 1.6
depressed       0.66  0.27  0.02 0.505 0.50 1.3
depth           0.02  0.01  0.44 0.198 0.80 1.0
desires         0.43  0.33  0.03 0.296 0.70 1.9
disrespected    0.67  0.19  0.10 0.488 0.51 1.2
embarrassed     0.57  0.04 -0.06 0.329 0.67 1.0
emo_recog       0.40 -0.31  0.28 0.340 0.66 2.7
fear            0.39  0.53  0.06 0.438 0.56 1.9
free_will       0.31  0.28  0.40 0.338 0.66 2.7
goal            0.37 -0.17  0.22 0.218 0.78 2.1
guilt           0.59  0.06  0.06 0.352 0.65 1.0
happy           0.76  0.07  0.04 0.582 0.42 1.0
hungry          0.12  0.87 -0.07 0.776 0.22 1.1
intentions      0.32 -0.18  0.41 0.297 0.70 2.3
joy             0.75  0.12 -0.04 0.577 0.42 1.1
love            0.63  0.11  0.00 0.414 0.59 1.1
morality        0.47 -0.18  0.20 0.293 0.71 1.7
nauseated       0.16  0.51 -0.06 0.287 0.71 1.2
odors          -0.10  0.63  0.11 0.425 0.58 1.1
pain            0.21  0.79  0.01 0.664 0.34 1.1
personality     0.51 -0.06  0.30 0.359 0.64 1.7
pleasure        0.62  0.09  0.02 0.394 0.61 1.0
pride           0.77 -0.03 -0.02 0.602 0.40 1.0
reasoning       0.12 -0.04  0.49 0.259 0.74 1.1
recognizing     0.18 -0.17  0.32 0.160 0.84 2.1
remembering     0.10 -0.40  0.39 0.317 0.68 2.1
safe            0.42  0.33  0.31 0.380 0.62 2.8
seeing         -0.13 -0.05  0.23 0.072 0.93 1.7
self_aware      0.11  0.06  0.52 0.288 0.71 1.1
self_restraint  0.26  0.02  0.28 0.146 0.85 2.0
sounds         -0.17  0.01  0.33 0.139 0.86 1.5
temperature    -0.12 -0.13  0.42 0.211 0.79 1.4
thoughts        0.46  0.24  0.32 0.367 0.63 2.4
tired           0.27  0.46 -0.01 0.286 0.71 1.6

                       MR1  MR2  MR3
SS loadings           7.03 4.20 2.83
Proportion Var        0.18 0.10 0.07
Cumulative Var        0.18 0.28 0.35
Proportion Explained  0.50 0.30 0.20
Cumulative Proportion 0.50 0.80 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 663  and the objective function was  4.8 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  198 with the empirical chi square  808.39  with prob <  8.8e-05 
The total number of observations was  200  with MLE Chi Square =  877.46  with prob <  3.9e-08 

Tucker Lewis Index of factoring reliability =  0.892
RMSEA index =  0.047  and the 90 % confidence intervals are  0.033 0.047
BIC =  -2635.32
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.95 0.88
Multiple R square of scores with factors       0.91 0.90 0.78
Minimum correlation of possible factor scores  0.83 0.80 0.55
efa_child_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_child_small_rot_loadings <- efa_child_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_child_small_rot_items <- efa_child_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_child_small_rot_items$items, 40)
[1] "feel proud, feel happy, feel joy, get hurt feelings, feel sad, feel love, feel pleasure, feel guilty, feel embarrassed, have beliefs, have a personality, get angry, feel calm, know what's nice and what's mean, have thoughts, have desires, feel safe, understand how somebody else is feeling, have goals"
[2] "get hungry, feel pain, do math (negative loading), smell things, feel scared, feel sick, feel tired, remember things (negative loading)"                                                                                                                                                                      
[3] "be aware of itself, figure out how to do things, be aware of things, sense whether something is close by or far away, sense temperatures, make plans, decide what to do, make choices, hear sounds, recognize somebody else, have self-control, communicate with somebody else, see things"                   

Combined dataset: Children & adults

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_comb_max_unrot <- fa(d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
efa_comb_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.73  0.04 -0.06 -0.12  0.07  0.03  0.11  0.00  0.13 -0.18 -0.07  0.07  0.04 0.63
beliefs         0.58  0.36  0.01 -0.13  0.12 -0.10  0.02  0.11 -0.12  0.12  0.03 -0.02 -0.07 0.55
calm            0.70 -0.02  0.04  0.04 -0.09 -0.05  0.01  0.03 -0.03 -0.08  0.08  0.08 -0.02 0.53
choices         0.30  0.15  0.42 -0.30 -0.02  0.15 -0.13  0.04  0.04 -0.01  0.02  0.02 -0.05 0.42
communicating   0.07  0.42  0.29  0.19 -0.12  0.32  0.21 -0.02  0.14 -0.03  0.00 -0.11  0.01 0.50
computations   -0.29  0.82  0.13  0.08  0.10  0.02 -0.04  0.06 -0.02 -0.11  0.09  0.10 -0.08 0.83
conscious       0.23 -0.02  0.52  0.00  0.01 -0.10  0.04 -0.31  0.02  0.00  0.14 -0.06 -0.02 0.46
depressed       0.78  0.13 -0.13  0.06 -0.09  0.05 -0.05  0.02  0.14 -0.06 -0.02  0.04 -0.07 0.69
depth          -0.08  0.08  0.52  0.17  0.30 -0.04 -0.14 -0.10 -0.09 -0.03 -0.03 -0.05  0.12 0.46
desires         0.67 -0.09  0.04 -0.09  0.06  0.20  0.13  0.06 -0.29  0.24  0.06  0.09  0.02 0.68
disrespected    0.75  0.19 -0.15 -0.06  0.04 -0.02 -0.09 -0.11  0.13  0.07  0.04 -0.07  0.05 0.68
embarrassed     0.59  0.23 -0.22 -0.05  0.39  0.10  0.13 -0.11  0.07 -0.03 -0.03 -0.04 -0.11 0.67
emo_recog       0.38  0.46  0.07  0.05  0.02 -0.25  0.07  0.00  0.06  0.11 -0.03 -0.12 -0.03 0.46
fear            0.71 -0.32  0.11  0.10 -0.07  0.04  0.19  0.04 -0.04 -0.14 -0.12 -0.01  0.04 0.71
free_will       0.30  0.09  0.46 -0.43 -0.04  0.20 -0.23 -0.03 -0.08 -0.13 -0.09 -0.04  0.00 0.63
goal            0.40  0.26  0.18 -0.07 -0.04 -0.04  0.12  0.11 -0.14  0.03  0.02  0.15  0.03 0.34
guilt           0.67  0.25 -0.16 -0.01  0.32  0.01  0.01 -0.12 -0.08 -0.04 -0.06 -0.01  0.11 0.67
happy           0.82  0.21 -0.14  0.10 -0.16  0.04 -0.07 -0.10 -0.03 -0.06  0.03 -0.01 -0.05 0.79
hungry          0.53 -0.72  0.12  0.01  0.10  0.01 -0.09  0.02  0.01  0.02 -0.02  0.01 -0.06 0.84
intentions      0.21  0.49  0.26 -0.18  0.03 -0.02 -0.04  0.04  0.05  0.03 -0.05  0.14  0.17 0.44
joy             0.80  0.19 -0.19  0.12 -0.11  0.09 -0.11 -0.01 -0.04  0.05  0.13 -0.03  0.01 0.79
love            0.73  0.19 -0.12  0.10  0.03 -0.03 -0.14 -0.08  0.02  0.15 -0.05 -0.03 -0.03 0.65
morality        0.41  0.46  0.04  0.04  0.01 -0.23 -0.04  0.22  0.04  0.03 -0.12 -0.12  0.15 0.54
nauseated       0.46 -0.38  0.15  0.16  0.13  0.11  0.00  0.15  0.03  0.05 -0.08  0.05 -0.10 0.48
odors           0.26 -0.53  0.35  0.06  0.16  0.03  0.02  0.03  0.05 -0.09  0.25 -0.13  0.09 0.60
pain            0.60 -0.54  0.15  0.00  0.03  0.05 -0.03  0.10  0.10  0.03  0.01 -0.01  0.03 0.71
personality     0.57  0.39  0.03 -0.12  0.14 -0.13  0.08  0.24  0.03  0.03  0.05 -0.12 -0.13 0.62
pleasure        0.71  0.02 -0.05  0.18 -0.13  0.00 -0.10  0.07 -0.15 -0.03  0.05 -0.06  0.05 0.60
pride           0.76  0.32 -0.23  0.01  0.00 -0.01  0.01 -0.06 -0.03 -0.06 -0.06  0.08  0.08 0.77
reasoning       0.21  0.26  0.47 -0.07 -0.13  0.09  0.04 -0.04  0.00 -0.02 -0.01 -0.09 -0.06 0.38
recognizing     0.01  0.49  0.33  0.15  0.03  0.16  0.09  0.18  0.02  0.00  0.08 -0.10  0.08 0.46
remembering     0.01  0.54  0.35  0.12 -0.13  0.16  0.05 -0.03  0.03  0.18 -0.28 -0.07 -0.05 0.59
safe            0.68 -0.17  0.26  0.01 -0.11 -0.25  0.10 -0.01 -0.19 -0.15 -0.06 -0.04 -0.06 0.72
seeing          0.12  0.03  0.38  0.11 -0.04  0.03  0.06 -0.05  0.06  0.13 -0.01  0.07  0.08 0.22
self_aware      0.39  0.13  0.37 -0.17 -0.10 -0.20  0.23 -0.25  0.09  0.17  0.09  0.08 -0.01 0.55
self_restraint  0.44  0.27  0.13 -0.16 -0.06 -0.13 -0.11  0.18  0.21  0.05  0.05  0.09  0.09 0.44
sounds         -0.02  0.03  0.42  0.17  0.00  0.08  0.16 -0.02  0.01 -0.04  0.14  0.10  0.05 0.27
temperature    -0.20  0.05  0.53  0.35  0.14 -0.15 -0.24 -0.06 -0.05  0.04 -0.10  0.10 -0.04 0.57
thoughts        0.62  0.13  0.20 -0.14 -0.16 -0.10 -0.06  0.03  0.09  0.04  0.06  0.02 -0.03 0.51
tired           0.64 -0.29  0.11  0.16  0.03  0.00  0.06  0.06  0.19  0.02 -0.01  0.18 -0.02 0.61
                 u2 com
angry          0.37 1.4
beliefs        0.45 2.3
calm           0.47 1.1
choices        0.58 3.7
communicating  0.50 4.7
computations   0.17 1.5
conscious      0.54 2.4
depressed      0.31 1.3
depth          0.54 2.5
desires        0.32 2.2
disrespected   0.32 1.5
embarrassed    0.33 2.9
emo_recog      0.54 3.1
fear           0.29 1.9
free_will      0.37 4.3
goal           0.66 3.6
guilt          0.33 2.1
happy          0.21 1.4
hungry         0.16 2.0
intentions     0.56 3.0
joy            0.21 1.5
love           0.35 1.5
morality       0.46 3.8
nauseated      0.52 3.4
odors          0.40 3.5
pain           0.29 2.3
personality    0.38 3.0
pleasure       0.40 1.4
pride          0.23 1.7
reasoning      0.62 2.5
recognizing    0.54 3.0
remembering    0.41 3.2
safe           0.28 2.2
seeing         0.78 2.1
self_aware     0.45 5.8
self_restraint 0.56 4.1
sounds         0.73 2.2
temperature    0.43 3.2
thoughts       0.49 1.8
tired          0.39 2.1

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.01 4.45 2.92 0.86 0.65 0.63 0.49 0.49 0.41 0.34 0.33 0.28 0.21
Proportion Var         0.28 0.11 0.07 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.39 0.46 0.48 0.50 0.51 0.53 0.54 0.55 0.56 0.56 0.57 0.58
Proportion Explained   0.48 0.19 0.13 0.04 0.03 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Proportion  0.48 0.67 0.80 0.83 0.86 0.89 0.91 0.93 0.95 0.96 0.98 0.99 1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9  MR10
Correlation of scores with factors             0.99 0.97 0.93 0.82 0.81 0.77 0.75 0.73 0.72  0.70
Multiple R square of scores with factors       0.97 0.94 0.87 0.67 0.65 0.60 0.56 0.53 0.52  0.49
Minimum correlation of possible factor scores  0.94 0.88 0.73 0.34 0.30 0.20 0.12 0.06 0.05 -0.02
                                                MR11  MR12  MR13
Correlation of scores with factors              0.68  0.63  0.59
Multiple R square of scores with factors        0.46  0.39  0.35
Minimum correlation of possible factor scores  -0.08 -0.21 -0.31
# examine eigenvalues and variance explained
efa_comb_max_unrot_eigenvalues <- print(efa_comb_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.73  0.04 -0.06 -0.12  0.07  0.03  0.11  0.00  0.13 -0.18 -0.07  0.07  0.04 0.63
beliefs         0.58  0.36  0.01 -0.13  0.12 -0.10  0.02  0.11 -0.12  0.12  0.03 -0.02 -0.07 0.55
calm            0.70 -0.02  0.04  0.04 -0.09 -0.05  0.01  0.03 -0.03 -0.08  0.08  0.08 -0.02 0.53
choices         0.30  0.15  0.42 -0.30 -0.02  0.15 -0.13  0.04  0.04 -0.01  0.02  0.02 -0.05 0.42
communicating   0.07  0.42  0.29  0.19 -0.12  0.32  0.21 -0.02  0.14 -0.03  0.00 -0.11  0.01 0.50
computations   -0.29  0.82  0.13  0.08  0.10  0.02 -0.04  0.06 -0.02 -0.11  0.09  0.10 -0.08 0.83
conscious       0.23 -0.02  0.52  0.00  0.01 -0.10  0.04 -0.31  0.02  0.00  0.14 -0.06 -0.02 0.46
depressed       0.78  0.13 -0.13  0.06 -0.09  0.05 -0.05  0.02  0.14 -0.06 -0.02  0.04 -0.07 0.69
depth          -0.08  0.08  0.52  0.17  0.30 -0.04 -0.14 -0.10 -0.09 -0.03 -0.03 -0.05  0.12 0.46
desires         0.67 -0.09  0.04 -0.09  0.06  0.20  0.13  0.06 -0.29  0.24  0.06  0.09  0.02 0.68
disrespected    0.75  0.19 -0.15 -0.06  0.04 -0.02 -0.09 -0.11  0.13  0.07  0.04 -0.07  0.05 0.68
embarrassed     0.59  0.23 -0.22 -0.05  0.39  0.10  0.13 -0.11  0.07 -0.03 -0.03 -0.04 -0.11 0.67
emo_recog       0.38  0.46  0.07  0.05  0.02 -0.25  0.07  0.00  0.06  0.11 -0.03 -0.12 -0.03 0.46
fear            0.71 -0.32  0.11  0.10 -0.07  0.04  0.19  0.04 -0.04 -0.14 -0.12 -0.01  0.04 0.71
free_will       0.30  0.09  0.46 -0.43 -0.04  0.20 -0.23 -0.03 -0.08 -0.13 -0.09 -0.04  0.00 0.63
goal            0.40  0.26  0.18 -0.07 -0.04 -0.04  0.12  0.11 -0.14  0.03  0.02  0.15  0.03 0.34
guilt           0.67  0.25 -0.16 -0.01  0.32  0.01  0.01 -0.12 -0.08 -0.04 -0.06 -0.01  0.11 0.67
happy           0.82  0.21 -0.14  0.10 -0.16  0.04 -0.07 -0.10 -0.03 -0.06  0.03 -0.01 -0.05 0.79
hungry          0.53 -0.72  0.12  0.01  0.10  0.01 -0.09  0.02  0.01  0.02 -0.02  0.01 -0.06 0.84
intentions      0.21  0.49  0.26 -0.18  0.03 -0.02 -0.04  0.04  0.05  0.03 -0.05  0.14  0.17 0.44
joy             0.80  0.19 -0.19  0.12 -0.11  0.09 -0.11 -0.01 -0.04  0.05  0.13 -0.03  0.01 0.79
love            0.73  0.19 -0.12  0.10  0.03 -0.03 -0.14 -0.08  0.02  0.15 -0.05 -0.03 -0.03 0.65
morality        0.41  0.46  0.04  0.04  0.01 -0.23 -0.04  0.22  0.04  0.03 -0.12 -0.12  0.15 0.54
nauseated       0.46 -0.38  0.15  0.16  0.13  0.11  0.00  0.15  0.03  0.05 -0.08  0.05 -0.10 0.48
odors           0.26 -0.53  0.35  0.06  0.16  0.03  0.02  0.03  0.05 -0.09  0.25 -0.13  0.09 0.60
pain            0.60 -0.54  0.15  0.00  0.03  0.05 -0.03  0.10  0.10  0.03  0.01 -0.01  0.03 0.71
personality     0.57  0.39  0.03 -0.12  0.14 -0.13  0.08  0.24  0.03  0.03  0.05 -0.12 -0.13 0.62
pleasure        0.71  0.02 -0.05  0.18 -0.13  0.00 -0.10  0.07 -0.15 -0.03  0.05 -0.06  0.05 0.60
pride           0.76  0.32 -0.23  0.01  0.00 -0.01  0.01 -0.06 -0.03 -0.06 -0.06  0.08  0.08 0.77
reasoning       0.21  0.26  0.47 -0.07 -0.13  0.09  0.04 -0.04  0.00 -0.02 -0.01 -0.09 -0.06 0.38
recognizing     0.01  0.49  0.33  0.15  0.03  0.16  0.09  0.18  0.02  0.00  0.08 -0.10  0.08 0.46
remembering     0.01  0.54  0.35  0.12 -0.13  0.16  0.05 -0.03  0.03  0.18 -0.28 -0.07 -0.05 0.59
safe            0.68 -0.17  0.26  0.01 -0.11 -0.25  0.10 -0.01 -0.19 -0.15 -0.06 -0.04 -0.06 0.72
seeing          0.12  0.03  0.38  0.11 -0.04  0.03  0.06 -0.05  0.06  0.13 -0.01  0.07  0.08 0.22
self_aware      0.39  0.13  0.37 -0.17 -0.10 -0.20  0.23 -0.25  0.09  0.17  0.09  0.08 -0.01 0.55
self_restraint  0.44  0.27  0.13 -0.16 -0.06 -0.13 -0.11  0.18  0.21  0.05  0.05  0.09  0.09 0.44
sounds         -0.02  0.03  0.42  0.17  0.00  0.08  0.16 -0.02  0.01 -0.04  0.14  0.10  0.05 0.27
temperature    -0.20  0.05  0.53  0.35  0.14 -0.15 -0.24 -0.06 -0.05  0.04 -0.10  0.10 -0.04 0.57
thoughts        0.62  0.13  0.20 -0.14 -0.16 -0.10 -0.06  0.03  0.09  0.04  0.06  0.02 -0.03 0.51
tired           0.64 -0.29  0.11  0.16  0.03  0.00  0.06  0.06  0.19  0.02 -0.01  0.18 -0.02 0.61
                 u2 com
angry          0.37 1.4
beliefs        0.45 2.3
calm           0.47 1.1
choices        0.58 3.7
communicating  0.50 4.7
computations   0.17 1.5
conscious      0.54 2.4
depressed      0.31 1.3
depth          0.54 2.5
desires        0.32 2.2
disrespected   0.32 1.5
embarrassed    0.33 2.9
emo_recog      0.54 3.1
fear           0.29 1.9
free_will      0.37 4.3
goal           0.66 3.6
guilt          0.33 2.1
happy          0.21 1.4
hungry         0.16 2.0
intentions     0.56 3.0
joy            0.21 1.5
love           0.35 1.5
morality       0.46 3.8
nauseated      0.52 3.4
odors          0.40 3.5
pain           0.29 2.3
personality    0.38 3.0
pleasure       0.40 1.4
pride          0.23 1.7
reasoning      0.62 2.5
recognizing    0.54 3.0
remembering    0.41 3.2
safe           0.28 2.2
seeing         0.78 2.1
self_aware     0.45 5.8
self_restraint 0.56 4.1
sounds         0.73 2.2
temperature    0.43 3.2
thoughts       0.49 1.8
tired          0.39 2.1

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.01 4.45 2.92 0.86 0.65 0.63 0.49 0.49 0.41 0.34 0.33 0.28 0.21
Proportion Var         0.28 0.11 0.07 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.39 0.46 0.48 0.50 0.51 0.53 0.54 0.55 0.56 0.56 0.57 0.58
Proportion Explained   0.48 0.19 0.13 0.04 0.03 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Proportion  0.48 0.67 0.80 0.83 0.86 0.89 0.91 0.93 0.95 0.96 0.98 0.99 1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9  MR10
Correlation of scores with factors             0.99 0.97 0.93 0.82 0.81 0.77 0.75 0.73 0.72  0.70
Multiple R square of scores with factors       0.97 0.94 0.87 0.67 0.65 0.60 0.56 0.53 0.52  0.49
Minimum correlation of possible factor scores  0.94 0.88 0.73 0.34 0.30 0.20 0.12 0.06 0.05 -0.02
                                                MR11  MR12  MR13
Correlation of scores with factors              0.68  0.63  0.59
Multiple R square of scores with factors        0.46  0.39  0.35
Minimum correlation of possible factor scores  -0.08 -0.21 -0.31
# count factors with eigenvalues > 1 and variance explained > 5%
efa_comb_max_unrot_nfactors <- efa_comb_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_comb_max_unrot_nfactors
[1] 3
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_comb_max_unrot_loadings <- fa.sort(loadings(efa_comb_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_comb_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA))))
efa_comb_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1

Maximal (13-factor) rotated solution

# do factor analysis
efa_comb_max_rot <- fa(d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
efa_comb_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR7   MR8   MR6   MR5   MR9  MR10  MR11  MR13  MR12   h2
angry           0.60  0.31  0.02  0.17 -0.16  0.08  0.10  0.21 -0.05  0.12 -0.02  0.20  0.03 0.63
beliefs         0.57 -0.03  0.05  0.18  0.00  0.10  0.31  0.13  0.23  0.03  0.01 -0.08  0.04 0.55
calm            0.58  0.34  0.02  0.11 -0.04  0.13  0.08 -0.07  0.07  0.13 -0.07  0.04  0.11 0.53
choices         0.14  0.10  0.17  0.57  0.06  0.14  0.10  0.02  0.05 -0.05  0.00  0.00  0.06 0.42
communicating   0.11 -0.12  0.67  0.09  0.02  0.07 -0.02  0.04 -0.06  0.00  0.03  0.00 -0.01 0.50
computations    0.03 -0.73  0.38  0.08  0.24 -0.08  0.17  0.09  0.02 -0.01 -0.07  0.03  0.22 0.83
conscious       0.08  0.18  0.16  0.22  0.29  0.49 -0.06  0.02 -0.05  0.05 -0.10 -0.08 -0.03 0.46
depressed       0.75  0.25  0.07  0.10 -0.14  0.03  0.08  0.00 -0.08  0.02  0.06  0.04  0.12 0.69
depth          -0.12  0.02  0.18  0.15  0.60  0.08  0.03  0.09  0.01  0.00 -0.08  0.01 -0.11 0.46
desires         0.48  0.39  0.04  0.16 -0.10  0.09 -0.02  0.07  0.50 -0.01  0.02 -0.02 -0.05 0.68
disrespected    0.75  0.14 -0.02  0.12 -0.09  0.13  0.12  0.09 -0.05 -0.13  0.01  0.00 -0.08 0.68
embarrassed     0.62  0.07  0.02  0.02 -0.08  0.01  0.05  0.51  0.04 -0.05 -0.01 -0.01  0.02 0.67
emo_recog       0.45 -0.16  0.17  0.00  0.09  0.22  0.36  0.06 -0.01  0.05  0.09 -0.08 -0.02 0.46
fear            0.43  0.64  0.08  0.05 -0.08  0.09 -0.01  0.02  0.04  0.28  0.02  0.09 -0.04 0.71
free_will       0.13  0.10  0.09  0.76  0.09  0.08  0.00  0.01  0.03  0.07  0.00  0.01 -0.06 0.63
goal            0.33  0.02  0.17  0.18  0.02  0.15  0.20 -0.01  0.26  0.13  0.00  0.11  0.08 0.34
guilt           0.71  0.06 -0.03  0.05  0.07  0.00  0.07  0.32  0.11  0.02 -0.04  0.09 -0.13 0.67
happy           0.85  0.16  0.08  0.10 -0.10  0.08 -0.01 -0.08 -0.01  0.09  0.02 -0.03  0.04 0.79
hungry          0.16  0.85 -0.27  0.09  0.05  0.05 -0.10  0.01  0.03  0.00 -0.01 -0.05  0.01 0.84
intentions      0.24 -0.23  0.22  0.33  0.12  0.14  0.26  0.03  0.09 -0.05  0.03  0.24 -0.01 0.44
joy             0.84  0.18  0.08  0.05 -0.11  0.00  0.02 -0.11  0.08 -0.05 -0.04 -0.07  0.01 0.79
love            0.76  0.15  0.00  0.05  0.04  0.07  0.09  0.01  0.03 -0.09  0.14 -0.06 -0.02 0.65
morality        0.47 -0.11  0.16  0.06  0.09 -0.01  0.50 -0.03 -0.01  0.08  0.06  0.06 -0.11 0.54
nauseated       0.20  0.63  0.03  0.02  0.09 -0.06  0.01  0.06  0.08 -0.01  0.07 -0.02  0.10 0.48
odors          -0.06  0.64  0.01  0.08  0.16  0.13 -0.03  0.02 -0.02 -0.02 -0.35 -0.08 -0.08 0.60
pain            0.25  0.78 -0.10  0.12 -0.02  0.07  0.02 -0.03  0.01 -0.03 -0.04  0.02 -0.01 0.71
personality     0.53  0.01  0.13  0.16 -0.06  0.06  0.46  0.20  0.09  0.05 -0.03 -0.13  0.09 0.62
pleasure        0.66  0.29  0.05  0.03  0.01 -0.02  0.05 -0.18  0.09  0.13 -0.05 -0.06 -0.04 0.60
pride           0.83  0.03  0.02  0.05 -0.10  0.04  0.09  0.08  0.06  0.09  0.04  0.15 -0.02 0.77
reasoning       0.11  0.00  0.38  0.37  0.12  0.23  0.08 -0.03  0.00  0.09  0.04 -0.07  0.00 0.38
recognizing     0.07 -0.20  0.56  0.12  0.17 -0.03  0.22  0.01  0.08 -0.02 -0.10 -0.01  0.00 0.46
remembering     0.09 -0.27  0.54  0.18  0.17  0.08  0.11 -0.02  0.02 -0.01  0.37 -0.03 -0.05 0.59
safe            0.43  0.46 -0.03  0.16  0.08  0.27  0.13 -0.07  0.07  0.43 -0.01 -0.05  0.00 0.72
seeing          0.01  0.15  0.27  0.08  0.20  0.23  0.04 -0.08  0.06 -0.06  0.06  0.09 -0.01 0.22
self_aware      0.23  0.10  0.13  0.19  0.02  0.64  0.14  0.03  0.07  0.02  0.04  0.05  0.02 0.55
self_restraint  0.38  0.04  0.07  0.26 -0.02  0.12  0.38 -0.09 -0.04 -0.11 -0.03  0.15  0.09 0.44
sounds         -0.12  0.10  0.35  0.03  0.21  0.19 -0.04 -0.02  0.07  0.04 -0.14  0.08  0.09 0.27
temperature    -0.20  0.00  0.16  0.03  0.68  0.08  0.02 -0.11 -0.05  0.01  0.10 -0.01  0.11 0.57
thoughts        0.48  0.21  0.07  0.30 -0.04  0.26  0.22 -0.11  0.00  0.01  0.01  0.00  0.07 0.51
tired           0.40  0.62  0.04 -0.02  0.02  0.13  0.05  0.01 -0.01 -0.03  0.03  0.14  0.16 0.61
                 u2 com
angry          0.37 2.7
beliefs        0.45 2.5
calm           0.47 2.3
choices        0.58 1.7
communicating  0.50 1.2
computations   0.17 2.2
conscious      0.54 3.2
depressed      0.31 1.5
depth          0.54 1.7
desires        0.32 3.4
disrespected   0.32 1.4
embarrassed    0.33 2.0
emo_recog      0.54 3.5
fear           0.29 2.4
free_will      0.37 1.2
goal           0.66 5.4
guilt          0.33 1.7
happy          0.21 1.2
hungry         0.16 1.4
intentions     0.56 6.7
joy            0.21 1.2
love           0.35 1.3
morality       0.46 2.7
nauseated      0.52 1.4
odors          0.40 1.9
pain           0.29 1.3
personality    0.38 3.0
pleasure       0.40 1.8
pride          0.23 1.2
reasoning      0.62 3.5
recognizing    0.54 2.1
remembering    0.41 3.2
safe           0.28 4.3
seeing         0.78 4.7
self_aware     0.45 1.8
self_restraint 0.56 3.9
sounds         0.73 3.8
temperature    0.43 1.5
thoughts       0.49 3.6
tired          0.39 2.2

                       MR1  MR2  MR3  MR4  MR7  MR8  MR6  MR5  MR9 MR10 MR11 MR13 MR12
SS loadings           8.54 4.66 1.95 1.74 1.33 1.21 1.21 0.62 0.49 0.42 0.38 0.29 0.24
Proportion Var        0.21 0.12 0.05 0.04 0.03 0.03 0.03 0.02 0.01 0.01 0.01 0.01 0.01
Cumulative Var        0.21 0.33 0.38 0.42 0.46 0.49 0.52 0.53 0.54 0.55 0.56 0.57 0.58
Proportion Explained  0.37 0.20 0.08 0.08 0.06 0.05 0.05 0.03 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion 0.37 0.57 0.66 0.73 0.79 0.84 0.89 0.92 0.94 0.96 0.98 0.99 1.00

Mean item complexity =  2.5
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR7  MR8  MR6  MR5  MR9 MR10
Correlation of scores with factors             0.96 0.95 0.84 0.83 0.83 0.77 0.77 0.78 0.72 0.72
Multiple R square of scores with factors       0.93 0.90 0.70 0.70 0.68 0.60 0.59 0.61 0.51 0.52
Minimum correlation of possible factor scores  0.85 0.80 0.41 0.39 0.36 0.20 0.18 0.22 0.03 0.05
                                                MR11  MR13  MR12
Correlation of scores with factors              0.68  0.63  0.63
Multiple R square of scores with factors        0.46  0.40  0.40
Minimum correlation of possible factor scores  -0.07 -0.21 -0.21
# examine eigenvalues and variance explained
efa_comb_max_rot_eigenvalues <- print(efa_comb_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR7   MR8   MR6   MR5   MR9  MR10  MR11  MR13  MR12   h2
angry           0.60  0.31  0.02  0.17 -0.16  0.08  0.10  0.21 -0.05  0.12 -0.02  0.20  0.03 0.63
beliefs         0.57 -0.03  0.05  0.18  0.00  0.10  0.31  0.13  0.23  0.03  0.01 -0.08  0.04 0.55
calm            0.58  0.34  0.02  0.11 -0.04  0.13  0.08 -0.07  0.07  0.13 -0.07  0.04  0.11 0.53
choices         0.14  0.10  0.17  0.57  0.06  0.14  0.10  0.02  0.05 -0.05  0.00  0.00  0.06 0.42
communicating   0.11 -0.12  0.67  0.09  0.02  0.07 -0.02  0.04 -0.06  0.00  0.03  0.00 -0.01 0.50
computations    0.03 -0.73  0.38  0.08  0.24 -0.08  0.17  0.09  0.02 -0.01 -0.07  0.03  0.22 0.83
conscious       0.08  0.18  0.16  0.22  0.29  0.49 -0.06  0.02 -0.05  0.05 -0.10 -0.08 -0.03 0.46
depressed       0.75  0.25  0.07  0.10 -0.14  0.03  0.08  0.00 -0.08  0.02  0.06  0.04  0.12 0.69
depth          -0.12  0.02  0.18  0.15  0.60  0.08  0.03  0.09  0.01  0.00 -0.08  0.01 -0.11 0.46
desires         0.48  0.39  0.04  0.16 -0.10  0.09 -0.02  0.07  0.50 -0.01  0.02 -0.02 -0.05 0.68
disrespected    0.75  0.14 -0.02  0.12 -0.09  0.13  0.12  0.09 -0.05 -0.13  0.01  0.00 -0.08 0.68
embarrassed     0.62  0.07  0.02  0.02 -0.08  0.01  0.05  0.51  0.04 -0.05 -0.01 -0.01  0.02 0.67
emo_recog       0.45 -0.16  0.17  0.00  0.09  0.22  0.36  0.06 -0.01  0.05  0.09 -0.08 -0.02 0.46
fear            0.43  0.64  0.08  0.05 -0.08  0.09 -0.01  0.02  0.04  0.28  0.02  0.09 -0.04 0.71
free_will       0.13  0.10  0.09  0.76  0.09  0.08  0.00  0.01  0.03  0.07  0.00  0.01 -0.06 0.63
goal            0.33  0.02  0.17  0.18  0.02  0.15  0.20 -0.01  0.26  0.13  0.00  0.11  0.08 0.34
guilt           0.71  0.06 -0.03  0.05  0.07  0.00  0.07  0.32  0.11  0.02 -0.04  0.09 -0.13 0.67
happy           0.85  0.16  0.08  0.10 -0.10  0.08 -0.01 -0.08 -0.01  0.09  0.02 -0.03  0.04 0.79
hungry          0.16  0.85 -0.27  0.09  0.05  0.05 -0.10  0.01  0.03  0.00 -0.01 -0.05  0.01 0.84
intentions      0.24 -0.23  0.22  0.33  0.12  0.14  0.26  0.03  0.09 -0.05  0.03  0.24 -0.01 0.44
joy             0.84  0.18  0.08  0.05 -0.11  0.00  0.02 -0.11  0.08 -0.05 -0.04 -0.07  0.01 0.79
love            0.76  0.15  0.00  0.05  0.04  0.07  0.09  0.01  0.03 -0.09  0.14 -0.06 -0.02 0.65
morality        0.47 -0.11  0.16  0.06  0.09 -0.01  0.50 -0.03 -0.01  0.08  0.06  0.06 -0.11 0.54
nauseated       0.20  0.63  0.03  0.02  0.09 -0.06  0.01  0.06  0.08 -0.01  0.07 -0.02  0.10 0.48
odors          -0.06  0.64  0.01  0.08  0.16  0.13 -0.03  0.02 -0.02 -0.02 -0.35 -0.08 -0.08 0.60
pain            0.25  0.78 -0.10  0.12 -0.02  0.07  0.02 -0.03  0.01 -0.03 -0.04  0.02 -0.01 0.71
personality     0.53  0.01  0.13  0.16 -0.06  0.06  0.46  0.20  0.09  0.05 -0.03 -0.13  0.09 0.62
pleasure        0.66  0.29  0.05  0.03  0.01 -0.02  0.05 -0.18  0.09  0.13 -0.05 -0.06 -0.04 0.60
pride           0.83  0.03  0.02  0.05 -0.10  0.04  0.09  0.08  0.06  0.09  0.04  0.15 -0.02 0.77
reasoning       0.11  0.00  0.38  0.37  0.12  0.23  0.08 -0.03  0.00  0.09  0.04 -0.07  0.00 0.38
recognizing     0.07 -0.20  0.56  0.12  0.17 -0.03  0.22  0.01  0.08 -0.02 -0.10 -0.01  0.00 0.46
remembering     0.09 -0.27  0.54  0.18  0.17  0.08  0.11 -0.02  0.02 -0.01  0.37 -0.03 -0.05 0.59
safe            0.43  0.46 -0.03  0.16  0.08  0.27  0.13 -0.07  0.07  0.43 -0.01 -0.05  0.00 0.72
seeing          0.01  0.15  0.27  0.08  0.20  0.23  0.04 -0.08  0.06 -0.06  0.06  0.09 -0.01 0.22
self_aware      0.23  0.10  0.13  0.19  0.02  0.64  0.14  0.03  0.07  0.02  0.04  0.05  0.02 0.55
self_restraint  0.38  0.04  0.07  0.26 -0.02  0.12  0.38 -0.09 -0.04 -0.11 -0.03  0.15  0.09 0.44
sounds         -0.12  0.10  0.35  0.03  0.21  0.19 -0.04 -0.02  0.07  0.04 -0.14  0.08  0.09 0.27
temperature    -0.20  0.00  0.16  0.03  0.68  0.08  0.02 -0.11 -0.05  0.01  0.10 -0.01  0.11 0.57
thoughts        0.48  0.21  0.07  0.30 -0.04  0.26  0.22 -0.11  0.00  0.01  0.01  0.00  0.07 0.51
tired           0.40  0.62  0.04 -0.02  0.02  0.13  0.05  0.01 -0.01 -0.03  0.03  0.14  0.16 0.61
                 u2 com
angry          0.37 2.7
beliefs        0.45 2.5
calm           0.47 2.3
choices        0.58 1.7
communicating  0.50 1.2
computations   0.17 2.2
conscious      0.54 3.2
depressed      0.31 1.5
depth          0.54 1.7
desires        0.32 3.4
disrespected   0.32 1.4
embarrassed    0.33 2.0
emo_recog      0.54 3.5
fear           0.29 2.4
free_will      0.37 1.2
goal           0.66 5.4
guilt          0.33 1.7
happy          0.21 1.2
hungry         0.16 1.4
intentions     0.56 6.7
joy            0.21 1.2
love           0.35 1.3
morality       0.46 2.7
nauseated      0.52 1.4
odors          0.40 1.9
pain           0.29 1.3
personality    0.38 3.0
pleasure       0.40 1.8
pride          0.23 1.2
reasoning      0.62 3.5
recognizing    0.54 2.1
remembering    0.41 3.2
safe           0.28 4.3
seeing         0.78 4.7
self_aware     0.45 1.8
self_restraint 0.56 3.9
sounds         0.73 3.8
temperature    0.43 1.5
thoughts       0.49 3.6
tired          0.39 2.2

                       MR1  MR2  MR3  MR4  MR7  MR8  MR6  MR5  MR9 MR10 MR11 MR13 MR12
SS loadings           8.54 4.66 1.95 1.74 1.33 1.21 1.21 0.62 0.49 0.42 0.38 0.29 0.24
Proportion Var        0.21 0.12 0.05 0.04 0.03 0.03 0.03 0.02 0.01 0.01 0.01 0.01 0.01
Cumulative Var        0.21 0.33 0.38 0.42 0.46 0.49 0.52 0.53 0.54 0.55 0.56 0.57 0.58
Proportion Explained  0.37 0.20 0.08 0.08 0.06 0.05 0.05 0.03 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion 0.37 0.57 0.66 0.73 0.79 0.84 0.89 0.92 0.94 0.96 0.98 0.99 1.00

Mean item complexity =  2.5
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR7  MR8  MR6  MR5  MR9 MR10
Correlation of scores with factors             0.96 0.95 0.84 0.83 0.83 0.77 0.77 0.78 0.72 0.72
Multiple R square of scores with factors       0.93 0.90 0.70 0.70 0.68 0.60 0.59 0.61 0.51 0.52
Minimum correlation of possible factor scores  0.85 0.80 0.41 0.39 0.36 0.20 0.18 0.22 0.03 0.05
                                                MR11  MR13  MR12
Correlation of scores with factors              0.68  0.63  0.63
Multiple R square of scores with factors        0.46  0.40  0.40
Minimum correlation of possible factor scores  -0.07 -0.21 -0.21
efa_comb_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_comb_small_rot <- fa(d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_comb_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
angry           0.67  0.30  0.04 0.53 0.47 1.4
beliefs         0.65 -0.04  0.18 0.46 0.54 1.2
calm            0.60  0.35  0.11 0.50 0.50 1.7
choices         0.23  0.09  0.46 0.27 0.73 1.6
communicating   0.17 -0.26  0.40 0.26 0.74 2.1
computations    0.05 -0.79  0.31 0.73 0.27 1.3
conscious       0.08  0.23  0.51 0.31 0.69 1.4
depressed       0.77  0.23  0.00 0.65 0.35 1.2
depth          -0.16  0.00  0.49 0.27 0.73 1.2
desires         0.53  0.39  0.09 0.44 0.56 1.9
disrespected    0.77  0.15  0.00 0.62 0.38 1.1
embarrassed     0.65  0.05 -0.06 0.42 0.58 1.0
emo_recog       0.51 -0.21  0.24 0.36 0.64 1.8
fear            0.46  0.62  0.10 0.60 0.40 1.9
free_will       0.20  0.14  0.45 0.26 0.74 1.6
goal            0.42 -0.01  0.29 0.26 0.74 1.8
guilt           0.71  0.07  0.00 0.51 0.49 1.0
happy           0.83  0.18  0.02 0.73 0.27 1.1
hungry          0.13  0.90 -0.04 0.82 0.18 1.0
intentions      0.33 -0.27  0.40 0.35 0.65 2.7
joy             0.82  0.18 -0.03 0.71 0.29 1.1
love            0.74  0.16  0.03 0.58 0.42 1.1
morality        0.54 -0.19  0.22 0.37 0.63 1.6
nauseated       0.21  0.58  0.09 0.39 0.61 1.3
odors          -0.08  0.64  0.22 0.46 0.54 1.3
pain            0.27  0.79  0.06 0.69 0.31 1.2
personality     0.64 -0.06  0.20 0.46 0.54 1.2
pleasure        0.64  0.30  0.04 0.50 0.50 1.4
pride           0.86  0.03 -0.05 0.74 0.26 1.0
reasoning       0.18 -0.04  0.55 0.34 0.66 1.2
recognizing     0.14 -0.34  0.46 0.35 0.65 2.0
remembering     0.16 -0.39  0.47 0.40 0.60 2.2
safe            0.47  0.50  0.25 0.54 0.46 2.5
seeing          0.03  0.11  0.40 0.18 0.82 1.2
self_aware      0.31  0.13  0.42 0.29 0.71 2.1
self_restraint  0.47  0.00  0.25 0.28 0.72 1.5
sounds         -0.11  0.05  0.42 0.19 0.81 1.2
temperature    -0.26 -0.03  0.46 0.28 0.72 1.6
thoughts        0.55  0.22  0.29 0.44 0.56 1.9
tired           0.41  0.58  0.11 0.51 0.49 1.9

                       MR1  MR2  MR3
SS loadings           9.62 5.04 3.39
Proportion Var        0.24 0.13 0.08
Cumulative Var        0.24 0.37 0.45
Proportion Explained  0.53 0.28 0.19
Cumulative Proportion 0.53 0.81 1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 663  and the objective function was  3.26 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.04 

The harmonic number of observations is  394 with the empirical chi square  865.63  with prob <  1.7e-07 
The total number of observations was  400  with MLE Chi Square =  1248.87  with prob <  2.2e-38 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.049  and the 90 % confidence intervals are  0.043 0.051
BIC =  -2723.48
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.97 0.96 0.91
Multiple R square of scores with factors       0.95 0.93 0.83
Minimum correlation of possible factor scores  0.90 0.85 0.65
# examine eigenvalues and variance explained
efa_comb_small_rot_eigenvalues <- print(efa_comb_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
angry           0.67  0.30  0.04 0.53 0.47 1.4
beliefs         0.65 -0.04  0.18 0.46 0.54 1.2
calm            0.60  0.35  0.11 0.50 0.50 1.7
choices         0.23  0.09  0.46 0.27 0.73 1.6
communicating   0.17 -0.26  0.40 0.26 0.74 2.1
computations    0.05 -0.79  0.31 0.73 0.27 1.3
conscious       0.08  0.23  0.51 0.31 0.69 1.4
depressed       0.77  0.23  0.00 0.65 0.35 1.2
depth          -0.16  0.00  0.49 0.27 0.73 1.2
desires         0.53  0.39  0.09 0.44 0.56 1.9
disrespected    0.77  0.15  0.00 0.62 0.38 1.1
embarrassed     0.65  0.05 -0.06 0.42 0.58 1.0
emo_recog       0.51 -0.21  0.24 0.36 0.64 1.8
fear            0.46  0.62  0.10 0.60 0.40 1.9
free_will       0.20  0.14  0.45 0.26 0.74 1.6
goal            0.42 -0.01  0.29 0.26 0.74 1.8
guilt           0.71  0.07  0.00 0.51 0.49 1.0
happy           0.83  0.18  0.02 0.73 0.27 1.1
hungry          0.13  0.90 -0.04 0.82 0.18 1.0
intentions      0.33 -0.27  0.40 0.35 0.65 2.7
joy             0.82  0.18 -0.03 0.71 0.29 1.1
love            0.74  0.16  0.03 0.58 0.42 1.1
morality        0.54 -0.19  0.22 0.37 0.63 1.6
nauseated       0.21  0.58  0.09 0.39 0.61 1.3
odors          -0.08  0.64  0.22 0.46 0.54 1.3
pain            0.27  0.79  0.06 0.69 0.31 1.2
personality     0.64 -0.06  0.20 0.46 0.54 1.2
pleasure        0.64  0.30  0.04 0.50 0.50 1.4
pride           0.86  0.03 -0.05 0.74 0.26 1.0
reasoning       0.18 -0.04  0.55 0.34 0.66 1.2
recognizing     0.14 -0.34  0.46 0.35 0.65 2.0
remembering     0.16 -0.39  0.47 0.40 0.60 2.2
safe            0.47  0.50  0.25 0.54 0.46 2.5
seeing          0.03  0.11  0.40 0.18 0.82 1.2
self_aware      0.31  0.13  0.42 0.29 0.71 2.1
self_restraint  0.47  0.00  0.25 0.28 0.72 1.5
sounds         -0.11  0.05  0.42 0.19 0.81 1.2
temperature    -0.26 -0.03  0.46 0.28 0.72 1.6
thoughts        0.55  0.22  0.29 0.44 0.56 1.9
tired           0.41  0.58  0.11 0.51 0.49 1.9

                       MR1  MR2  MR3
SS loadings           9.62 5.04 3.39
Proportion Var        0.24 0.13 0.08
Cumulative Var        0.24 0.37 0.45
Proportion Explained  0.53 0.28 0.19
Cumulative Proportion 0.53 0.81 1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 663  and the objective function was  3.26 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.04 

The harmonic number of observations is  394 with the empirical chi square  865.63  with prob <  1.7e-07 
The total number of observations was  400  with MLE Chi Square =  1248.87  with prob <  2.2e-38 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.049  and the 90 % confidence intervals are  0.043 0.051
BIC =  -2723.48
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.97 0.96 0.91
Multiple R square of scores with factors       0.95 0.93 0.83
Minimum correlation of possible factor scores  0.90 0.85 0.65
efa_comb_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_comb_small_rot_loadings <- efa_comb_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_comb_small_rot_items <- efa_comb_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_comb_small_rot_items$items, 40)
[1] "feel proud, feel happy, feel joy, feel sad, get hurt feelings, feel love, feel guilty, get angry, have beliefs, feel embarrassed, have a personality, feel pleasure, feel calm, have thoughts, know what's nice and what's mean, have desires, understand how somebody else is feeling, have self-control, have goals"
[2] "get hungry, do math (negative loading), feel pain, smell things, feel scared, feel sick, feel tired, feel safe"                                                                                                                                                                                                       
[3] "figure out how to do things, be aware of things, sense whether something is close by or far away, remember things, sense temperatures, make choices, recognize somebody else, decide what to do, be aware of itself, hear sounds, see things, communicate with somebody else, make plans"                             

Regression on factor scores

Children vs. adults

scores_all <- fa(d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "child")))
colnames(scores_all)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_all_analysis <- d %>%
  select(subid, ageGroup, character) %>%
  distinct() %>%
  left_join(scores_all) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = c("subid", "ageGroup")
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_all_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_all_analysis$character) <- cbind(robot = c(-1, 1))
contrasts(scores_all_analysis$ageGroup) <- cbind(child = c(-1, 1))
r1 <- lmer(score ~ character * factor + (1 | subid), scores_all_analysis)
r2 <- lmer(score ~ character * factor + ageGroup + (1 | subid), scores_all_analysis)
r3 <- lmer(score ~ character * factor * ageGroup + (1 | subid), scores_all_analysis)
anova(r1, r2, r3)
refitting model(s) with ML (instead of REML)
Data: scores_all_analysis
Models:
r1: score ~ character * factor + (1 | subid)
r2: score ~ character * factor + ageGroup + (1 | subid)
r3: score ~ character * factor * ageGroup + (1 | subid)
   Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)    
r1  8 2830.1 2870.3 -1407.0   2814.1                              
r2  9 2777.7 2823.0 -1379.9   2759.7  54.374      1  1.658e-13 ***
r3 14 2575.6 2646.0 -1273.8   2547.6 212.106      5  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r1)
# summary(r2)
summary(r3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * ageGroup + (1 | subid)
   Data: scores_all_analysis

REML criterion at convergence: 2612.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.7304 -0.4705  0.0183  0.5793  2.9429 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.0639   0.2528  
 Residual             0.5125   0.7159  
Number of obs: 1125, groups:  subid, 375

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.006232   0.025038  -0.249
characterrobot                        -0.250911   0.025038 -10.021
factorF1                              -0.001663   0.030207  -0.055
factorF3                               0.012368   0.030207   0.409
ageGroupchild                          0.191460   0.025038   7.647
characterrobot:factorF1                0.260869   0.030207   8.636
characterrobot:factorF3                0.391390   0.030207  12.957
characterrobot:ageGroupchild           0.046804   0.025038   1.869
factorF1:ageGroupchild                 0.456654   0.030207  15.117
factorF3:ageGroupchild                -0.298395   0.030207  -9.878
characterrobot:factorF1:ageGroupchild  0.003589   0.030207   0.119
characterrobot:factorF3:ageGroupchild -0.040662   0.030207  -1.346

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 agGrpc chr:F1 chr:F3 chrc:G fcF1:G fcF3:G c:F1:G
charactrrbt  0.001                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
ageGropchld -0.019  0.035  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000  0.001 -0.001  0.000                                          
chrctrrb:F3  0.000  0.000 -0.001  0.001  0.000 -0.500                                   
chrctrrbt:G  0.035 -0.019  0.000  0.000  0.001  0.000  0.000                            
fctrF1:gGrp  0.000  0.000 -0.019  0.009  0.000  0.035 -0.017  0.000                     
fctrF3:gGrp  0.000  0.000  0.009 -0.019  0.000 -0.017  0.035  0.000 -0.500              
chrctr:F1:G  0.000  0.000  0.035 -0.017  0.000 -0.019  0.009  0.000  0.001 -0.001       
chrctr:F3:G  0.000  0.000 -0.017  0.035  0.000  0.009 -0.019  0.000 -0.001  0.001 -0.500
round(signif(summary(r3)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r3, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * ageGroup + (1 | subid)
                          Df    AIC    LRT Pr(Chi)
<none>                       2575.6               
character:factor:ageGroup  2 2573.9 2.2422  0.3259
r3_step2 <- lmer(score ~ character * factor + ageGroup + character:ageGroup + factor:ageGroup + (1 | subid), scores_all_analysis)
drop1(r3_step2, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + ageGroup + character:ageGroup + 
    factor:ageGroup + (1 | subid)
                   Df    AIC    LRT Pr(Chi)    
<none>                2573.9                   
character:factor    2 2941.8 371.91  <2e-16 ***
character:ageGroup  1 2575.4   3.52  0.0608 .  
factor:ageGroup     2 2776.2 206.35  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
r3_step3 <- lmer(score ~ character * factor + ageGroup + factor:ageGroup + (1 | subid), scores_all_analysis)
drop1(r3_step3, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + ageGroup + factor:ageGroup + (1 | 
    subid)
                 Df    AIC    LRT   Pr(Chi)    
<none>              2575.4                     
character:factor  2 2942.9 371.52 < 2.2e-16 ***
factor:ageGroup   2 2777.7 206.35 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# # robot only
# robot_r1 <- lmer(score ~ factor + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# robot_r2 <- lmer(score ~ factor + ageGroup + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# robot_r3 <- lmer(score ~ factor * ageGroup + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# anova(robot_r1, robot_r2, robot_r3)
# # summary(robot_r1)
# # summary(robot_r2)
# summary(robot_r3)
scores_all_plotting <- d %>%
  select(subid, ageGroup, character) %>%
  distinct() %>%
  full_join(scores_all) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("ageGroup", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = c("subid", "ageGroup")
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_all_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive")),
                ageGroup = factor(ageGroup,
                                  levels = c("adult", "child"),
                                  labels = c("adults", "children"))),
                                  # levels = c("child", "adult"),
                                  # labels = c("children", "adults"))),
       aes(x = ageGroup, y = mean, color = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  geom_point(size = 5, position = position_dodge(width = 0.4)) +
  geom_errorbar(aes(ymin = ci_lower, ymax = ci_upper), 
                width = 0.2, position = position_dodge(width = 0.4)) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by age group",
       # subtitle = "Adults (Study 1) vs. children (Study 2)\n",
       x = "Age group",
       y = "Mean factor score") # 1000 by 500

Children by age at test

scores_children <- fa(d3_child, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "child")))
colnames(scores_children)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_children_analysis <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  left_join(scores_children) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_children_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_children_analysis$character) <- cbind(robot = c(-1, 1))
r4 <- lmer(score ~ character * factor + (1 | subid), scores_children_analysis)
r5 <- lmer(score ~ character * factor + scale(age) + (1 | subid), scores_children_analysis)
r6 <- lmer(score ~ character * factor * scale(age) + (1 | subid), scores_children_analysis)
anova(r4, r5, r6)
refitting model(s) with ML (instead of REML)
Data: scores_children_analysis
Models:
r4: score ~ character * factor + (1 | subid)
r5: score ~ character * factor + scale(age) + (1 | subid)
r6: score ~ character * factor * scale(age) + (1 | subid)
   Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)    
r4  8 1467.0 1501.8 -725.51   1451.0                              
r5  9 1468.9 1508.0 -725.43   1450.9  0.1519      1     0.6967    
r6 14 1437.0 1497.9 -704.51   1409.0 41.8487      5  6.321e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r4)
# summary(r5)
summary(r6)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * scale(age) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1463.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.8784 -0.5649  0.0598  0.6355  2.2010 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.07345  0.2710  
 Residual             0.63301  0.7956  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                                    Estimate Std. Error t value
(Intercept)                        -0.007491   0.038635  -0.194
characterrobot                     -0.229166   0.038635  -5.932
factorF1                            0.004129   0.047057   0.088
factorF3                            0.029476   0.047057   0.626
scale(age)                         -0.021522   0.038776  -0.555
characterrobot:factorF1             0.237645   0.047057   5.050
characterrobot:factorF3             0.409935   0.047057   8.711
characterrobot:scale(age)          -0.077890   0.038776  -2.009
factorF1:scale(age)                -0.255520   0.047229  -5.410
factorF3:scale(age)                 0.249338   0.047229   5.279
characterrobot:factorF1:scale(age) -0.062275   0.047229  -1.319
characterrobot:factorF3:scale(age)  0.042963   0.047229   0.910

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:() fF3:() c:F1:(
charactrrbt  0.037                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
scale(age)   0.004  0.030  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000  0.037 -0.018  0.000                                          
chrctrrb:F3  0.000  0.000 -0.018  0.037  0.000 -0.500                                   
chrctrrb:()  0.030  0.004  0.000  0.000  0.083  0.000  0.000                            
fctrF1:sc()  0.000  0.000  0.004 -0.002  0.000  0.030 -0.015  0.000                     
fctrF3:sc()  0.000  0.000 -0.002  0.004  0.000 -0.015  0.030  0.000 -0.500              
chrct:F1:()  0.000  0.000  0.030 -0.015  0.000  0.004 -0.002  0.000  0.083 -0.041       
chrct:F3:()  0.000  0.000 -0.015  0.030  0.000 -0.002  0.004  0.000 -0.041  0.083 -0.500
# stepwise regression
drop1(r6, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * scale(age) + (1 | subid)
                            Df    AIC    LRT Pr(Chi)
<none>                         1437.0               
character:factor:scale(age)  2 1434.9 1.8567  0.3952
r6_step2 <- lmer(score ~ character * factor + scale(age) + character:scale(age) + factor:scale(age) + (1 | subid), scores_children_analysis)
drop1(r6_step2, test = "Chisq")
convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q
Single term deletions

Model:
score ~ character * factor + scale(age) + character:scale(age) + 
    factor:scale(age) + (1 | subid)
                     Df    AIC     LRT   Pr(Chi)    
<none>                  1434.9                      
character:factor      2 1590.7 159.841 < 2.2e-16 ***
character:scale(age)  1 1437.0   4.078   0.04346 *  
factor:scale(age)     2 1466.8  35.914  1.59e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r6_step2)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + scale(age) + character:scale(age) +  
    factor:scale(age) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1456.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.8592 -0.5629  0.0700  0.6348  2.2600 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.07355  0.2712  
 Residual             0.63271  0.7954  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                           Estimate Std. Error t value
(Intercept)               -0.007491   0.038635  -0.194
characterrobot            -0.229166   0.038635  -5.932
factorF1                   0.005977   0.047025   0.127
factorF3                   0.028201   0.047025   0.600
scale(age)                -0.021522   0.038776  -0.555
characterrobot:factorF1    0.237865   0.047046   5.056
characterrobot:factorF3    0.409783   0.047046   8.710
characterrobot:scale(age) -0.077890   0.038776  -2.009
factorF1:scale(age)       -0.250358   0.047055  -5.320
factorF3:scale(age)        0.245777   0.047055   5.223

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:()
charactrrbt  0.037                                                        
factorF1     0.000  0.000                                                 
factorF3     0.000  0.000 -0.500                                          
scale(age)   0.004  0.030  0.000  0.000                                   
chrctrrb:F1  0.000  0.000  0.037 -0.018  0.000                            
chrctrrb:F3  0.000  0.000 -0.018  0.037  0.000 -0.500                     
chrctrrb:()  0.030  0.004  0.000  0.000  0.083  0.000  0.000              
fctrF1:sc()  0.000  0.000  0.001 -0.001  0.000  0.030 -0.015  0.000       
fctrF3:sc()  0.000  0.000 -0.001  0.001  0.000 -0.015  0.030  0.000 -0.500
# explore polynoial effects of age
r6b <- lmer(score ~ character * factor * poly(age, 1) + (1 | subid), scores_children_analysis)
r7 <- lmer(score ~ character * factor * poly(age, 2) + (1 | subid), scores_children_analysis)
r8 <- lmer(score ~ character * factor * poly(age, 3) + (1 | subid), scores_children_analysis)
anova(r6b, r7, r8)
refitting model(s) with ML (instead of REML)
Data: scores_children_analysis
Models:
r6b: score ~ character * factor * poly(age, 1) + (1 | subid)
r7: score ~ character * factor * poly(age, 2) + (1 | subid)
r8: score ~ character * factor * poly(age, 3) + (1 | subid)
    Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
r6b 14 1437.0 1497.9 -704.51   1409.0                         
r7  20 1444.9 1532.0 -702.47   1404.9 4.0793      6     0.6659
r8  26 1450.4 1563.5 -699.22   1398.4 6.5048      6     0.3691
# summary(r6b)
# summary(r7)
summary(r8)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 3) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1392.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.8366 -0.5301  0.0687  0.5974  2.2357 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.0716   0.2676  
 Residual             0.6367   0.7979  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.005954   0.038635  -0.154
characterrobot                        -0.225939   0.038635  -5.848
factorF1                               0.005033   0.047247   0.107
factorF3                               0.028466   0.047247   0.602
poly(age, 3)1                         -0.507317   0.929561  -0.546
poly(age, 3)2                          1.517377   0.929738   1.632
poly(age, 3)3                         -1.064327   0.929152  -1.145
characterrobot:factorF1                0.237458   0.047247   5.026
characterrobot:factorF3                0.411414   0.047247   8.708
characterrobot:poly(age, 3)1          -1.896880   0.929561  -2.041
characterrobot:poly(age, 3)2           0.739308   0.929738   0.795
characterrobot:poly(age, 3)3          -0.183101   0.929152  -0.197
factorF1:poly(age, 3)1                -5.922489   1.136765  -5.210
factorF3:poly(age, 3)1                 5.920107   1.136765   5.208
factorF1:poly(age, 3)2                -0.160440   1.136983  -0.141
factorF3:poly(age, 3)2                 0.696858   1.136983   0.613
factorF1:poly(age, 3)3                 0.613124   1.136266   0.540
factorF3:poly(age, 3)3                -0.982179   1.136266  -0.864
characterrobot:factorF1:poly(age, 3)1 -1.431553   1.136765  -1.259
characterrobot:factorF3:poly(age, 3)1  0.969558   1.136765   0.853
characterrobot:factorF1:poly(age, 3)2  0.705745   1.136983   0.621
characterrobot:factorF3:poly(age, 3)2 -0.555744   1.136983  -0.489
characterrobot:factorF1:poly(age, 3)3  2.159919   1.136266   1.901
characterrobot:factorF3:poly(age, 3)3 -0.305138   1.136266  -0.269

Correlation matrix not shown by default, as p = 24 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
round(signif(summary(r6)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r8, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * poly(age, 3) + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1450.4               
character:factor:poly(age, 3)  6 1445.0 6.5986  0.3596
r8_step2 <- lmer(score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 3):character + poly(age, 3):factor + (1 | subid), scores_children_analysis)
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
drop1(r8_step2, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 6 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 4 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
Single term deletions

Model:
score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 
    3):character + poly(age, 3):factor + (1 | subid)
                              Df    AIC     LRT Pr(Chi)
<none>                           1450.8                
character:poly(age, 3)         1 1448.9 0.04053  0.8405
factor:poly(age, 3)            2 1447.6 0.73750  0.6916
character:factor:poly(age, 2)  4 1445.0 2.20553  0.6980
r8_step3 <- lmer(score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 2) + character:poly(age, 2) + factor:poly(age, 2), scores_children_analysis)
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
drop1(r8_step3, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
Single term deletions

Model:
score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 
    2) + character:poly(age, 2) + factor:poly(age, 2)
                       Df    AIC     LRT   Pr(Chi)    
<none>                    1439.9                      
poly(age, 3)            1 1439.2   1.334   0.24815    
character:factor        2 1596.5 160.556 < 2.2e-16 ***
character:poly(age, 2)  2 1440.9   4.959   0.08379 .  
factor:poly(age, 2)     4 1468.3  36.366 2.433e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r8_step3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age,  
    2) + character:poly(age, 2) + factor:poly(age, 2)
   Data: scores_children_analysis

REML criterion at convergence: 1417

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.7618 -0.5295  0.0828  0.6459  2.3109 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.07057  0.2656  
 Residual             0.63534  0.7971  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                              Estimate Std. Error t value
(Intercept)                  -0.005992   0.038533  -0.156
characterrobot               -0.225922   0.038534  -5.863
factorF1                      0.005961   0.047123   0.127
factorF3                      0.028253   0.047123   0.600
poly(age, 3)1                -0.493244   0.924390  -0.534
poly(age, 3)2                 1.519777   0.927227   1.639
poly(age, 3)3                -1.048164   0.923105  -1.135
characterrobot:factorF1       0.237441   0.047194   5.031
characterrobot:factorF3       0.411189   0.047194   8.713
characterrobot:poly(age, 2)1 -1.894450   0.927048  -2.044
characterrobot:poly(age, 2)2  0.740136   0.927297   0.798
factorF1:poly(age, 2)1       -5.988002   1.127742  -5.310
factorF3:poly(age, 2)1        5.879122   1.127742   5.213
factorF1:poly(age, 2)2       -0.220734   1.128439  -0.196
factorF3:poly(age, 2)2        0.731799   1.128439   0.649

Correlation matrix not shown by default, as p = 15 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
fit warnings:
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
# # robot only
# robot_r4 <- lmer(score ~ factor + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# robot_r5 <- lmer(score ~ factor + scale(age) + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# robot_r6 <- lmer(score ~ factor * scale(age) + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# anova(robot_r4, robot_r5, robot_r6)
# # summary(robot_r4)
# # summary(robot_r5)
# summary(robot_r6)
scores_children_plotting <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  full_join(scores_children) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("age", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_children_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive"))),
       aes(x = age, y = mean, color = character, fill = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  # geom_smooth(method = "loess", alpha = 0.4) +
  geom_smooth(method = "lm", alpha = 0.4) +
  geom_point(size = 2) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by children's age",
       # subtitle = "Children (Study 2)\n",
       x = "Age (years)",
       y = "Factor score") # 1000 by 500

Adults by age at test

scores_adults <- fa(d3_adult, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "adult")))
colnames(scores_adults)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_adults_analysis <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  left_join(scores_adults) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_adults_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_adults_analysis$character) <- cbind(robot = c(-1, 1))
r4 <- lmer(score ~ character * factor + (1 | subid), scores_adults_analysis)
r5 <- lmer(score ~ character * factor + scale(age) + (1 | subid), scores_adults_analysis)
r6 <- lmer(score ~ character * factor * scale(age) + (1 | subid), scores_adults_analysis)
anova(r4, r5, r6)
refitting model(s) with ML (instead of REML)
Data: scores_adults_analysis
Models:
r4: score ~ character * factor + (1 | subid)
r5: score ~ character * factor + scale(age) + (1 | subid)
r6: score ~ character * factor * scale(age) + (1 | subid)
   Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
r4  8 1310.7 1344.9 -647.33   1294.7                         
r5  9 1311.6 1350.2 -646.82   1293.6 1.0198      1     0.3126
r6 14 1317.7 1377.7 -644.83   1289.7 3.9724      5     0.5534
# summary(r4)
# summary(r5)
summary(r6)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * scale(age) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1343.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.1700 -0.4243 -0.0353  0.4173  5.0265 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.07636  0.2763  
 Residual             0.59300  0.7701  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                    Estimate Std. Error t value
(Intercept)                        -0.009176   0.039137  -0.234
characterrobot                     -0.244150   0.039137  -6.238
factorF1                           -0.021288   0.047008  -0.453
factorF3                            0.009262   0.047008   0.197
scale(age)                         -0.042074   0.039453  -1.066
characterrobot:factorF1             0.193142   0.047008   4.109
characterrobot:factorF3             0.473474   0.047008  10.072
characterrobot:scale(age)           0.023902   0.039453   0.606
factorF1:scale(age)                -0.064585   0.047387  -1.363
factorF3:scale(age)                 0.030715   0.047387   0.648
characterrobot:factorF1:scale(age) -0.022095   0.047387  -0.466
characterrobot:factorF3:scale(age)  0.057210   0.047387   1.207

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:() fF3:() c:F1:(
charactrrbt -0.017                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
scale(age)   0.002 -0.016  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000 -0.017  0.008  0.000                                          
chrctrrb:F3  0.000  0.000  0.008 -0.017  0.000 -0.500                                   
chrctrrb:() -0.016  0.002  0.000  0.000 -0.120  0.000  0.000                            
fctrF1:sc()  0.000  0.000  0.002 -0.001  0.000 -0.016  0.008  0.000                     
fctrF3:sc()  0.000  0.000 -0.001  0.002  0.000  0.008 -0.016  0.000 -0.500              
chrct:F1:()  0.000  0.000 -0.016  0.008  0.000  0.002 -0.001  0.000 -0.120  0.060       
chrct:F3:()  0.000  0.000  0.008 -0.016  0.000 -0.001  0.002  0.000  0.060 -0.120 -0.500
# stepwise regression
drop1(r6, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * scale(age) + (1 | subid)
                            Df    AIC    LRT Pr(Chi)
<none>                         1317.7               
character:factor:scale(age)  2 1315.2 1.5134  0.4692
r6_step2 <- lmer(score ~ character * factor + scale(age) + character:scale(age) + factor:scale(age) + (1 | subid), scores_adults_analysis)
drop1(r6_step2, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + scale(age) + character:scale(age) + 
    factor:scale(age) + (1 | subid)
                     Df    AIC     LRT Pr(Chi)    
<none>                  1315.2                    
character:factor      2 1482.0 170.875  <2e-16 ***
character:scale(age)  1 1313.5   0.375  0.5403    
factor:scale(age)     2 1313.3   2.084  0.3528    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r6_step2)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + scale(age) + character:scale(age) +  
    factor:scale(age) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1336.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.2024 -0.4299 -0.0289  0.4079  5.0794 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.07665  0.2769  
 Residual             0.59213  0.7695  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                           Estimate Std. Error t value
(Intercept)               -0.009176   0.039137  -0.234
characterrobot            -0.244150   0.039137  -6.238
factorF1                  -0.021635   0.046967  -0.461
factorF3                   0.010161   0.046967   0.216
scale(age)                -0.042074   0.039453  -1.066
characterrobot:factorF1    0.193190   0.046973   4.113
characterrobot:factorF3    0.473351   0.046973  10.077
characterrobot:scale(age)  0.023902   0.039453   0.606
factorF1:scale(age)       -0.067235   0.047010  -1.430
factorF3:scale(age)        0.037578   0.047010   0.799

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:()
charactrrbt -0.017                                                        
factorF1     0.000  0.000                                                 
factorF3     0.000  0.000 -0.500                                          
scale(age)   0.002 -0.016  0.000  0.000                                   
chrctrrb:F1  0.000  0.000 -0.017  0.008  0.000                            
chrctrrb:F3  0.000  0.000  0.008 -0.017  0.000 -0.500                     
chrctrrb:() -0.016  0.002  0.000  0.000 -0.120  0.000  0.000              
fctrF1:sc()  0.000  0.000  0.000  0.000  0.000 -0.016  0.008  0.000       
fctrF3:sc()  0.000  0.000  0.000  0.000  0.000  0.008 -0.016  0.000 -0.500
# explore polynoial effects of age
r6b <- lmer(score ~ character * factor * poly(age, 1) + (1 | subid), scores_adults_analysis)
r7 <- lmer(score ~ character * factor * poly(age, 2) + (1 | subid), scores_adults_analysis)
r8 <- lmer(score ~ character * factor * poly(age, 3) + (1 | subid), scores_adults_analysis)
anova(r6b, r7, r8)
refitting model(s) with ML (instead of REML)
Data: scores_adults_analysis
Models:
r6b: score ~ character * factor * poly(age, 1) + (1 | subid)
r7: score ~ character * factor * poly(age, 2) + (1 | subid)
r8: score ~ character * factor * poly(age, 3) + (1 | subid)
    Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)  
r6b 14 1317.7 1377.7 -644.83   1289.7                            
r7  20 1313.8 1399.5 -636.91   1273.8 15.8362      6    0.01466 *
r8  26 1325.2 1436.7 -636.62   1273.2  0.5744      6    0.99681  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r6b)
summary(r7)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 2) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1279.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.2507 -0.4023 -0.0506  0.3857  5.0127 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.08116  0.2849  
 Residual             0.57757  0.7600  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.011630   0.039235  -0.296
characterrobot                        -0.239682   0.039235  -6.109
factorF1                              -0.014914   0.046538  -0.320
factorF3                               0.006894   0.046538   0.148
poly(age, 2)1                         -1.100333   0.923922  -1.191
poly(age, 2)2                         -1.334111   0.938832  -1.421
characterrobot:factorF1                0.181652   0.046538   3.903
characterrobot:factorF3                0.484090   0.046538  10.402
characterrobot:poly(age, 2)1           0.762584   0.923922   0.825
characterrobot:poly(age, 2)2           0.687514   0.938832   0.732
factorF1:poly(age, 2)1                -1.167741   1.095896  -1.066
factorF3:poly(age, 2)1                 0.566317   1.095896   0.517
factorF1:poly(age, 2)2                 3.429681   1.113581   3.080
factorF3:poly(age, 2)2                -3.219533   1.113581  -2.891
characterrobot:factorF1:poly(age, 2)1 -1.049730   1.095896  -0.958
characterrobot:factorF3:poly(age, 2)1  1.808909   1.095896   1.651
characterrobot:factorF1:poly(age, 2)2 -1.787344   1.113581  -1.605
characterrobot:factorF3:poly(age, 2)2  0.572177   1.113581   0.514

Correlation matrix not shown by default, as p = 18 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
summary(r8)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 3) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1267.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.2629 -0.4037 -0.0591  0.3873  5.0404 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.08181  0.2860  
 Residual             0.58387  0.7641  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.011480   0.039628  -0.290
characterrobot                        -0.241353   0.039628  -6.090
factorF1                              -0.014327   0.047025  -0.305
factorF3                               0.006298   0.047025   0.134
poly(age, 3)1                         -1.088609   0.964125  -1.129
poly(age, 3)2                         -1.308965   0.964970  -1.356
poly(age, 3)3                          0.480035   1.012121   0.474
characterrobot:factorF1                0.180395   0.047025   3.836
characterrobot:factorF3                0.483600   0.047025  10.284
characterrobot:poly(age, 3)1           0.653735   0.964125   0.678
characterrobot:poly(age, 3)2           0.613528   0.964970   0.636
characterrobot:poly(age, 3)3           0.058530   1.012121   0.058
factorF1:poly(age, 3)1                -1.128132   1.144074  -0.986
factorF3:poly(age, 3)1                 0.528151   1.144074   0.462
factorF1:poly(age, 3)2                 3.469080   1.145077   3.030
factorF3:poly(age, 3)2                -3.239854   1.145077  -2.829
factorF1:poly(age, 3)3                 0.331936   1.201029   0.276
factorF3:poly(age, 3)3                 0.179658   1.201029   0.150
characterrobot:factorF1:poly(age, 3)1 -1.132138   1.144074  -0.990
characterrobot:factorF3:poly(age, 3)1  1.777816   1.144074   1.554
characterrobot:factorF1:poly(age, 3)2 -1.848265   1.145077  -1.614
characterrobot:factorF3:poly(age, 3)2  0.557671   1.145077   0.487
characterrobot:factorF1:poly(age, 3)3 -0.094616   1.201029  -0.079
characterrobot:factorF3:poly(age, 3)3  0.204386   1.201029   0.170

Correlation matrix not shown by default, as p = 24 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
round(signif(summary(r6)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r8, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * poly(age, 3) + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1325.2               
character:factor:poly(age, 3)  6 1318.5 5.2973  0.5063
r8_step2 <- lmer(score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 3):character + poly(age, 3):factor + (1 | subid), scores_adults_analysis)
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
drop1(r8_step2, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 6 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 4 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
Single term deletions

Model:
score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 
    3):character + poly(age, 3):factor + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1321.3               
character:poly(age, 3)         1 1319.3 0.0035  0.9528
factor:poly(age, 3)            2 1317.5 0.2499  0.8825
character:factor:poly(age, 2)  4 1318.5 5.2669  0.2610
r8_step3 <- lmer(score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 2) + character:poly(age, 2) + factor:poly(age, 2), scores_adults_analysis)
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
drop1(r8_step3, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce qfixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
Single term deletions

Model:
score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 
    2) + character:poly(age, 2) + factor:poly(age, 2)
                       Df    AIC     LRT Pr(Chi)    
<none>                    1313.0                    
poly(age, 3)            1 1311.3   0.291  0.5898    
character:factor        2 1483.7 174.660  <2e-16 ***
character:poly(age, 2)  2 1309.8   0.827  0.6613    
factor:poly(age, 2)     4 1316.7  11.668  0.0200 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r8_step3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age,  
    2) + character:poly(age, 2) + factor:poly(age, 2)
   Data: scores_adults_analysis

REML criterion at convergence: 1290.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.3022 -0.4156 -0.0436  0.4020  5.1505 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.08157  0.2856  
 Residual             0.57978  0.7614  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                             Estimate Std. Error t value
(Intercept)                  -0.01126    0.03932  -0.286
characterrobot               -0.24147    0.03946  -6.119
factorF1                     -0.02148    0.04648  -0.462
factorF3                      0.01001    0.04648   0.215
poly(age, 3)1                -1.07389    0.92720  -1.158
poly(age, 3)2                -1.29796    0.94327  -1.376
poly(age, 3)3                 0.50036    0.94639   0.529
characterrobot:factorF1       0.18368    0.04661   3.940
characterrobot:factorF3       0.48260    0.04661  10.353
characterrobot:poly(age, 2)1  0.64590    0.95179   0.679
characterrobot:poly(age, 2)2  0.60599    0.95335   0.636
factorF1:poly(age, 2)1       -1.55316    1.07696  -1.442
factorF3:poly(age, 2)1        0.86662    1.07696   0.805
factorF1:poly(age, 2)2        2.92049    1.07991   2.704
factorF3:poly(age, 2)2       -2.84181    1.07991  -2.632

Correlation matrix not shown by default, as p = 15 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
fit warnings:
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
scores_adults_plotting <- d %>%
  filter(!is.na(age)) %>%
  select(subid, age, character) %>%
  distinct() %>%
  full_join(scores_adults) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("age", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_adults_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive"))),
       aes(x = age, y = mean, color = character, fill = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  # geom_smooth(method = "loess", alpha = 0.4) +
  geom_smooth(method = "lm", alpha = 0.4) +
  geom_point(size = 2) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by adults's age",
       # subtitle = "Adults (Study 2)\n",
       x = "Age (years)",
       y = "Factor score") # 1000 by 500

Big figure

# by condition
d1_bycond2 <- d2 %>%
  left_join(d_child02 %>% select(subid, age)) %>%
  select(character, capacity, capWording, responseNum, subid, ageGroup, age) %>%
  filter(capacity != "na", is.na(responseNum) == F) %>%
  mutate(capWording = gsub(" --.*", "", capWording),
         ageGroup3 = ifelse(ageGroup == "adult", "adult",
                            ifelse(is.na(age), NA,
                                   ifelse(age < 8, "7y", 
                                          ifelse(age < 9, "8y",
                                                 ifelse(age < 10, "9y",
                                                        NA)))))) %>%
  distinct()
Joining, by = c("subid", "age")
joining factors with different levels, coercing to character vector
d1_bycond2 %>% select(ageGroup3, subid) %>% distinct() %>% count(ageGroup3)
# make df for plotting
d1_bycond2_mb <- multi_boot(d1_bycond2,
                           column = "responseNum",
                           summary_groups = c("ageGroup3", "character", "capacity", "capWording"),
                           statistics_functions = c("mean", "ci_lower", "ci_upper"))
d1_bycond2_mb_factorsAll <- d1_bycond2_mb %>% 
  full_join(efa_comb_small_rot_loadings %>%
              group_by(factor) %>%
              mutate(order = rank(desc(loading_abs)))) %>%
  arrange(character, factor, desc(loading_abs)) %>%
  rownames_to_column(var = "full_order") %>%
  mutate(full_order = as.numeric(full_order)) %>%
  arrange(factorName, full_order) %>%
  ungroup() %>%
  filter(!is.na(ageGroup3)) %>%
  mutate(factorName = factor(factorName,
                             levels = c("Factor 1", "Factor 2", "Factor 3"),
                             labels = c("Social-emotional", 
                                        "Physiological", 
                                        "Perceptual-cognitive")))
Joining, by = c("capacity", "capWording")
joining character vector and factor, coercing into character vector
dodge_width <- 2
ggplot(d1_bycond2_mb_factorsAll, 
       aes(x = desc(order*2), y = mean,
           color = ageGroup3, shape = ageGroup3,
           label = capWording)) +
  facet_grid(factorName ~ character, scales = "free", space = "free") +
  geom_hline(yintercept = 0, lty = 3) +
  geom_hline(yintercept = 0.5, lty = 3) +
  geom_hline(yintercept = 1, lty = 3) +
  geom_point(stat = "identity", position = position_dodge(width = dodge_width), size = 8) +
  scale_shape_manual(values = c(rep(18, 3), 17)) +
  # scale_colour_brewer(type = "seq", palette = "PuRd") +
  scale_colour_hue(h = c(0, 180)) +
  geom_errorbar(aes(ymin = ci_lower, ymax = ci_upper),
                position = position_dodge(width = dodge_width), width = 0) +
  geom_text(aes(y = -0.5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Mean response (0 = NO, 0.5 = KINDA, 1 = YES)",
       x = "Capacity",
       color = "Age group: ", shape = "Age group: ") +
  scale_y_continuous(breaks = c(0, 0.5, 1)) +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 28),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 1700 by 2000

# FILTERED BY ROBOT
# feel safe
with(d2 %>% filter(capWording == "feel_safe", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 82    15   3
   child 33    22  40
  #summary()
# feel tired
with(d2 %>% filter(capWording == "feel_tired", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 88     6   6
   child 38    20  36
  #summary()
# feel scared
with(d2 %>% filter(capWording == "feel_scared", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 93     4   3
   child 50    18  28
  #summary()
# get hungry
with(d2 %>% filter(capWording == "get_hungry", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 96     1   2
   child 74     5  15
  #summary()
# feel pain
with(d2 %>% filter(capWording == "feel_pain", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 94     4   2
   child 65    12  17
  #summary()
# feel proud
proud_table <- with(d2 %>% filter(capWording == "feel_proud", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
proud_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.16666667 0.13888889 0.69444444
    8     0.33333333 0.21212121 0.45454545
    9     0.45833333 0.20833333 0.33333333
    adult 0.90099010 0.08910891 0.00990099
proud_table[3,2]+proud_table[3,3]
[1] 0.5416667
# feel happy
happy_table <- with(d2 %>% filter(capWording == "feel_happy", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
happy_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.16666667 0.11111111 0.72222222
    8     0.28571429 0.17142857 0.54285714
    9     0.41666667 0.16666667 0.41666667
    adult 0.89108911 0.03960396 0.06930693
happy_table[3,2]+happy_table[3,3]
[1] 0.5833333
# feel guilty
guilty_table <- with(d2 %>% filter(capWording == "feel_guilty", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
guilty_table
         responseCat
ageGroup3        no     kinda       yes
    7     0.4594595 0.2162162 0.3243243
    8     0.4705882 0.2058824 0.3235294
    9     0.5000000 0.2500000 0.2500000
    adult 0.9700000 0.0300000 0.0000000
guilty_table[1,2]+guilty_table[1,3]
[1] 0.5405405
guilty_table[2,2]+guilty_table[2,3]
[1] 0.5294118
guilty_table[3,2]+guilty_table[3,3]
[1] 0.5
clm_guilty <- ordinal::clm(responseCat ~ age,
                           data = d2 %>% 
                             filter(capWording == "feel_guilty",
                                    !is.na(responseCat),
                                    character == "robot"))
summary(clm_guilty)
formula: responseCat ~ age
data:    d2 %>% filter(capWording == "feel_guilty", !is.na(responseCat), character == "robot")

 link  threshold nobs logLik  AIC    niter max.grad cond.H 
 logit flexible  191  -113.71 233.42 7(0)  1.42e-10 1.2e+03

Coefficients:
    Estimate Std. Error z value Pr(>|z|)    
age  -0.1834     0.0362  -5.065 4.09e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
          Estimate Std. Error z value
no|kinda   -1.6428     0.4161  -3.948
kinda|yes  -0.6527     0.4109  -1.588
(4 observations deleted due to missingness)
# personality
personality_table <- with(d2 %>% filter(capWording == "have_a_personality", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
personality_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.25000000 0.22222222 0.52777778
    8     0.23529412 0.32352941 0.44117647
    9     0.29166667 0.33333333 0.37500000
    adult 0.62745098 0.30392157 0.06862745
personality_table[3,2]+personality_table[3,3]
[1] 0.7083333
# self-control
self_control_table <- with(d2 %>% filter(capWording == "have_self-control", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
self_control_table
         responseCat
ageGroup3        no     kinda       yes
    7     0.2777778 0.2222222 0.5000000
    8     0.2857143 0.2857143 0.4285714
    9     0.3333333 0.1666667 0.5000000
    adult 0.5643564 0.2673267 0.1683168
self_control_table[1,2]+self_control_table[1,3]
[1] 0.7222222
self_control_table[2,2]+self_control_table[2,3]
[1] 0.7142857
self_control_table[3,2]+self_control_table[3,3]
[1] 0.6666667
clm_self_control <- ordinal::clm(responseCat ~ age,
                                 data = d2 %>% 
                                   filter(capWording == "have_self-control",
                                          !is.na(responseCat),
                                          character == "robot"))
summary(clm_self_control)
formula: responseCat ~ age
data:    
d2 %>% filter(capWording == "have_self-control", !is.na(responseCat), character == "robot")

 link  threshold nobs logLik  AIC    niter max.grad cond.H 
 logit flexible  192  -198.17 402.34 4(0)  2.02e-08 3.6e+03

Coefficients:
    Estimate Std. Error z value Pr(>|z|)    
age -0.03914    0.01013  -3.863 0.000112 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
          Estimate Std. Error z value
no|kinda  -1.12987    0.25948  -4.354
kinda|yes -0.02018    0.24554  -0.082
(4 observations deleted due to missingness)
# MORE GENERAL
at_least_kinda_9y <- d2 %>% 
  filter(!is.na(responseCat),
         ageGroup == "child",
         !is.na(age),
         age > 9) %>%
  distinct() %>%
  count(character, capacity, responseCat) %>%
  group_by(character, capacity) %>%
  mutate(prop_n = n/sum(n, na.rm = T)) %>%
  select(-n) %>%
  spread(responseCat, prop_n) %>% # n) %>%
  mutate(at_least_kinda = sum(kinda, yes)) %>%
  left_join(efa_comb_small_rot_loadings) %>%
  arrange(factor, desc(at_least_kinda))
Joining, by = "capacity"
joining character vector and factor, coercing into character vector
at_least_kinda_9y %>%
  select(character:at_least_kinda, factor, loading)
at_least_kinda_adult <- d2 %>% 
  filter(!is.na(responseCat),
         character == "robot",
         ageGroup == "adult") %>%
  distinct() %>%
  count(capacity, responseCat) %>%
  group_by(capacity) %>%
  mutate(prop_n = n/sum(n, na.rm = T)) %>%
  select(-n) %>%
  spread(responseCat, prop_n) %>% # n) %>%
  mutate(at_least_kinda = sum(kinda, yes)) %>%
  left_join(efa_comb_small_rot_loadings) %>%
  arrange(factor, desc(at_least_kinda))
Joining, by = "capacity"
joining character vector and factor, coercing into character vector
at_least_kinda_adult %>%
  select(capacity:at_least_kinda, factor, loading)

BIG TABLE

# make dataframe
big_table <- efa_adult_small_rot_loadings %>% 
  setNames(paste0('adult_', names(.))) %>% 
  rename(capacity = adult_capacity, 
         capWording = adult_capWording) %>%
  full_join(efa_child_small_rot_loadings %>%
              setNames(paste0('child_', names(.))) %>%
              rename(capacity = child_capacity,
                     capWording = child_capWording)) %>%
  full_join(efa_comb_small_rot_loadings %>%
              setNames(paste0('comb_', names(.))) %>%
              rename(capacity = comb_capacity, 
                     capWording = comb_capWording)) %>%
  arrange(comb_factor, desc(comb_loading_abs)) %>%
  mutate(capWording = gsub("_", " ", capWording)) %>%
  select(capWording, 
         adult_F2, child_F1, comb_F1, # double-check adults!
         adult_F1, child_F2, comb_F2, # double-check adults!
         adult_F3, child_F3, comb_F3) %>%
  column_to_rownames(var = "capWording") %>%
  signif(3) %>%
  round(2)
Joining, by = c("capacity", "capWording")
Joining, by = c("capacity", "capWording")
big_table
cor.plot(scores_all %>% column_to_rownames(var = "subid") %>% select(-ageGroup))

cor.test(scores_all$score_F1, scores_all$score_F2, use = "complete.obs")

    Pearson's product-moment correlation

data:  scores_all$score_F1 and scores_all$score_F2
t = 0.37343, df = 373, p-value = 0.709
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.08209982  0.12036735
sample estimates:
       cor 
0.01933196 
cor.test(scores_all$score_F1, scores_all$score_F3, use = "complete.obs")

    Pearson's product-moment correlation

data:  scores_all$score_F1 and scores_all$score_F3
t = 0.2175, df = 373, p-value = 0.8279
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.09011296  0.11240371
sample estimates:
       cor 
0.01126085 
cor.test(scores_all$score_F2, scores_all$score_F3, use = "complete.obs")

    Pearson's product-moment correlation

data:  scores_all$score_F2 and scores_all$score_F3
t = -0.17088, df = 373, p-value = 0.8644
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.11001990  0.09250651
sample estimates:
         cor 
-0.008847426 
cor.ci(scores_adults %>% column_to_rownames(var = "subid") %>% select(-ageGroup))
Call:corCi(x = x, keys = keys, n.iter = n.iter, p = p, overlap = overlap, 
    poly = poly, method = method, plot = plot)

 Coefficients and bootstrapped confidence intervals 
         sc_F1 sc_F2 sc_F3
score_F1  1.00            
score_F2  0.06  1.00      
score_F3  0.03 -0.03  1.00

 scale correlations and bootstrapped confidence intervals 
            lower.emp lower.norm estimate upper.norm upper.emp    p
sc_F1-sc_F2     -0.08      -0.09     0.06       0.20      0.19 0.47
sc_F1-sc_F3     -0.06      -0.06     0.03       0.13      0.13 0.50
sc_F2-sc_F3     -0.13      -0.14    -0.03       0.11      0.09 0.80

cor.ci(scores_children %>% column_to_rownames(var = "subid") %>% select(-ageGroup))
Call:corCi(x = x, keys = keys, n.iter = n.iter, p = p, overlap = overlap, 
    poly = poly, method = method, plot = plot)

 Coefficients and bootstrapped confidence intervals 
         sc_F1 sc_F2 sc_F3
score_F1 1.00             
score_F2 0.00  1.00       
score_F3 0.01  0.00  1.00 

 scale correlations and bootstrapped confidence intervals 
            lower.emp lower.norm estimate upper.norm upper.emp    p
sc_F1-sc_F2     -0.15      -0.16     0.00       0.15      0.14 0.92
sc_F1-sc_F3     -0.14      -0.12     0.01       0.14      0.14 0.88
sc_F2-sc_F3     -0.11      -0.11     0.00       0.15      0.13 0.80

cor.ci(scores_all %>% column_to_rownames(var = "subid") %>% select(-ageGroup))
Call:corCi(x = x, keys = keys, n.iter = n.iter, p = p, overlap = overlap, 
    poly = poly, method = method, plot = plot)

 Coefficients and bootstrapped confidence intervals 
         sc_F1 sc_F2 sc_F3
score_F1  1.00            
score_F2  0.02  1.00      
score_F3  0.01 -0.01  1.00

 scale correlations and bootstrapped confidence intervals 
            lower.emp lower.norm estimate upper.norm upper.emp    p
sc_F1-sc_F2     -0.07      -0.09     0.02       0.13      0.12 0.69
sc_F1-sc_F3     -0.09      -0.09     0.01       0.10      0.07 0.86
sc_F2-sc_F3     -0.09      -0.11    -0.01       0.08      0.08 0.79

# by condition
d1_bycond3 <- d2 %>%
  left_join(d_child02 %>% select(subid, age)) %>%
  select(character, capacity, capWording, responseCat, subid, ageGroup, age) %>%
  filter(capacity != "na", !is.na(responseCat)) %>%
  mutate(capWording = gsub(" --.*", "", capWording),
         ageGroup3 = ifelse(ageGroup == "adult", "adult",
                            ifelse(is.na(age), NA,
                                   ifelse(age < 8, "7y", 
                                          ifelse(age < 9, "8y",
                                                 ifelse(age < 10, "9y",
                                                        NA)))))) %>%
  distinct()
Joining, by = c("subid", "age")
joining factors with different levels, coercing to character vector
d1_bycond3 %>% select(ageGroup3, subid) %>% distinct() %>% count(ageGroup3)
# make df for plotting
d1_bycond3_mb_factorsAll <- d1_bycond3 %>% 
  full_join(efa_comb_small_rot_loadings %>%
              group_by(factor) %>%
              mutate(order = rank(desc(loading_abs)))) %>%
  arrange(character, factor, desc(loading_abs)) %>%
  rownames_to_column(var = "full_order") %>%
  mutate(full_order = as.numeric(full_order)) %>%
  arrange(factorName, full_order) %>%
  ungroup() %>%
  filter(!is.na(ageGroup3)) %>%
  mutate(factorName = factor(factorName,
                             levels = c("Factor 1", "Factor 2", "Factor 3"),
                             labels = c("Social-emotional", 
                                        "Physiological", 
                                        "Perceptual-cognitive")),
         agentic = ifelse(capWording %in% c("decide_what_to_do", "make_choices", "have_self_control", 
                                            "make_plans", "have_goals", 
                                            "understand_how_somebody_else_is_feeling",
                                            "know_what's_nice_and_what's_mean", "have_thoughts",
                                            "remember_things", "communicate_with_somebody_else"),
                          TRUE, FALSE))
Joining, by = c("capacity", "capWording")
joining character vector and factor, coercing into character vector
d1_bycond3_annotate <- d1_bycond3_mb_factorsAll %>% 
  filter(order <= 4) %>% 
  select(character, order, capWording) %>% 
  distinct()
# ggplot(d1_bycond3_mb_factorsAll %>% filter(order <= 4), 
#        aes(x = interaction(ageGroup3, desc(order*2)), 
#            # y = responseCat,
#            # color = ageGroup3, shape = ageGroup3,
#            fill = responseCat,
#            label = ageGroup3)) +
#            # label = gsub("_", " ", paste(capWording, ageGroup3, sep = ": ")))) +
#   # facet_grid(factorName ~ character * order, scales = "free", space = "free") +
#   facet_grid(factorName ~ character, scales = "free", space = "free") +
#   geom_bar(position = "fill") +
#   geom_text(aes(y = -0.5, hjust = 0), 
#             color = "black",
#             # color = d1_bycond2_mb_factorsAll$textColor,
#             size = 8) +
#   geom_text(aes(x = order, y = 1.5, label = capWording), hjust = -1) +
#   # annotate("text", aes(facet = order, label = d1_bycond3_annotate$capWording)) +
#   labs(title = "Responses by mental capacity item",
#        y = "Relative frequency",
#        x = "Capacity * Age group",
#        fill = "Response: ") +
#   scale_y_continuous(breaks = c(0, 0.5, 1)) +
#   # coord_flip() +
#   theme_bw() +
#   theme(text = element_text(size = 28),
#         # axis.title.y = element_blank(),
#         axis.text.y = element_blank(),
#         axis.ticks.y = element_blank(),
#         legend.position = "top") # 1700 by 2000
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(order <= 5) %>%
         mutate(facet = tools::toTitleCase(paste0(character, " (", ageGroup, ")"))), 
         # mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))), 
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           # fill = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(aes(y = 5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 28),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 2000 by 1200

ggplot(d1_bycond3_mb_factorsAll %>%
         # filter(order <= 10) %>%
         # filter(order <= 5 | capWording %in% c("know_what's_nice_and_what's_mean",
         #                                       "make_choices")) %>% # add selected agency by factor
         mutate(facet = tools::toTitleCase(paste0(character, " (", ageGroup, ")"))), 
         # mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))), 
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           # fill = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(aes(y = 5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 32),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 2000 by 1200

d_srcd <- d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
  select(ageGroup, character, responseCat, order, capWording) %>%
  mutate(labeller = ifelse(responseCat == "no", gsub("_", " ", capWording), NA)) %>%
  distinct()
  
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
         mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))),
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 1000 by 500

d_srcd2 <- d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5, character == "robot") %>%
  select(ageGroup, character, responseCat, order, capWording) %>%
  mutate(labeller = ifelse(responseCat == "no", gsub("_", " ", capWording), NA)) %>%
  distinct()
  
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
         mutate(facet = tolower(paste(ageGroup, character, sep = ": "))) %>%
         mutate(facet = factor(facet, 
                               levels = c("child: beetle", "child: robot", 
                                          "adult: beetle", "adult: robot"),
                               labels = c("children: beetle", "children: robot", 
                                          "adults: beetle", "adults: robot"))) %>%
         mutate(ageGroup2 = factor(ageGroup, levels = c("child", "adult"),
                                   labels = c("children", "adults"))),
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd2, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  labs(title = "Responses (raw counts)",
       y = "Count",
       x = "Capacity",
       alpha = "response: ",
       fill = "character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 1000 by 500

ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5, character == "robot") %>%
         mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))) %>%
         mutate(facet = factor(facet, 
                               levels = c("Child: Robot", "Adult: Robot"),
                               labels = c("Children: robot", "Adults: robot"))) %>%
         mutate(ageGroup2 = factor(ageGroup, levels = c("child", "adult"),
                                   labels = c("children", "adults"))),
       aes(x = desc(order*2), 
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(~ ageGroup2) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black", fill = "#00BFC4") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd2, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 600 by 500

LS0tCnRpdGxlOiAiRGlta2lkIGFuYWx5c2lzIgphdXRob3I6ICJLYXJhIFdlaXNtYW4iCmRhdGU6ICIxLzIyLzIwMTciCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAotLS0KCiMgUHJlbGltaW5hcmllcwoKIyMgU2V0IHVwIGVudmlyb25tZW50CgpgYGB7ciBwcmVsaW19CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGxhbmdjb2cpCmxpYnJhcnkoc3RhdHMpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkoR1BBcm90YXRpb24pCmxpYnJhcnkobG1lNCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgojIGNsZWFyIGVudmlyb25tZW50CnJtKGxpc3Q9bHMoKSkKZ3JhcGhpY3Mub2ZmKCkKYGBgCgojIyBSZWFkIGluIGRhdGEKCmBgYHtyIHJlYWRpbmd9CiMgQURVTFQgcnVuIDAxICgzLXBvaW50IHNjYWxlKQpkX2FkdWx0MDEgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvYWR1bHRzL3VzX3J1bi0wMV8yMDE2LTA2LTA1X2Fub255bWl6ZWQuY3N2IikgJT4lIHNlbGVjdCgtWCkKCiMgIyBBRFVMVCBydW4gMDIgKDctcG9pbnQgc2NhbGUpCiMgZF9hZHVsdDAyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDJfMjAxNi0wNy0xOV9hbm9ueW1pemVkLmNzdiIpICU+JSBzZWxlY3QoLVgpCiMgCiMgIyBBRFVMVCBydW4gMDMgKDMtcG9pbnQgc2NhbGUsIG9yaWdpbmFsIHdvcmRpbmcgZm9yICdmcmVlIHdpbGwnIGFuZCAnaW50ZW50aW9ucycpCiMgZF9hZHVsdDAzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDNfMjAxNi0xMi0wOF9hbm9ueW1pemVkLmNzdiIpICU+JSBzZWxlY3QoLVgpCgojIENISUxEIHJ1biAwMSBbbHlkaWEsIG9saXZpYSwgYWxsaWUgKHN1bW1lciAyMDE2KSArIG5pY2t5LCBkcnUsIGFyaWVsLCBvbGl2aWEgKGZhbGwgMjAxNikgKyBjYW1wYmVsbCAod2ludGVyIDIwMTcpXQpkX2NoaWxkMDEgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAxXzIwMTctMDEtMTlfYW5vbnltaXplZC5jc3YiKSAlPiUgc2VsZWN0KC1YKQoKIyBkZW1vZ3JhcGhpYyBpbmZvIChmb3IgY2hpbGRyZW4pCmNoaWxkX2RlbW8gPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vZGlta2lkX3BhcnRpY2lwYW50X2FnZXNfMjAxNy0wMS0xOS5jc3YiKQpgYGAKCiMjIFRpZHkgZGF0YQoKYGBge3IgdGlkeWluZ30KIyB0aWR5IGFkdWx0IHJ1biAwMQpkX2FkdWx0MDIgPC0gZF9hZHVsdDAxICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBnZW5kZXIsIGV0aG5pY2l0eSwgZHVyYXRpb24sCiAgICAgICAgIGNoYXJOYW1lLCB0cmlhbE51bSwgY2FwYWNpdHksIGNhcFdvcmRpbmcsIAogICAgICAgICBob3ZlclRpbWUsIHJ0LCByZXNwb25zZSwgcmVzcG9uc2VOdW0pICU+JQogIHJlbmFtZShjaGFyYWN0ZXIgPSBjaGFyTmFtZSwKICAgICAgICAgc2Vzc2lvbkR1cmF0aW9uID0gZHVyYXRpb24pICU+JQogIG11dGF0ZShhZ2VHcm91cCA9ICJhZHVsdCIpCgojIHRpZHkgZGVtb2dyYXBoaWNzCmNoaWxkX2RlbW9fdGlkeSA8LSBjaGlsZF9kZW1vICU+JQogIG11dGF0ZShzdWJpZCA9IGdzdWIoIiAiLCAiIiwgc3ViaWQpKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCItIiwgIiIsIHN1YmlkKSkgJT4lCiAgbXV0YXRlKHN1YmlkID0gdG91cHBlcihzdWJpZCkpICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBnZW5kZXIsIGV0aG5pY2l0eSkKCiMgdGlkeSBjaGlsZCBydW4gMDEKZF9jaGlsZDAyIDwtIGRfY2hpbGQwMSAlPiUKICBmaWx0ZXIoY2hhcmFjdGVyICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpICAlPiUgIyBubyBlbGVwaGFudCBjb25kaXRpb24hIChuID0gMSBjaGlsZCkKICBzZWxlY3Qoc3ViaWQsIHNlc3Npb25EdXJhdGlvbiwKICAgICAgICAgY2hhcmFjdGVyLCB0cmlhbE51bSwgY2FwYWNpdHksIGNhcFdvcmRpbmcsIAogICAgICAgICBob3ZlclRpbWUsIHJ0LCByZXNwb25zZSwgcmVzcG9uc2VOdW0pICU+JQogIG11dGF0ZShhZ2VHcm91cCA9ICJjaGlsZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IGdzdWIoIiAiLCAiIiwgc3ViaWQpKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCItIiwgIiIsIHN1YmlkKSkgJT4lCiAgbXV0YXRlKHN1YmlkID0gdG91cHBlcihzdWJpZCkpICU+JQogIGxlZnRfam9pbihjaGlsZF9kZW1vX3RpZHkpICU+JQogIG11dGF0ZShzdWJpZCA9IGZhY3Rvcihhcy5jaGFyYWN0ZXIoc3ViaWQpKSkKCiMgY29tYmluZSBkYXRhc2V0cwpkIDwtIGRfYWR1bHQwMiAlPiUKICBmdWxsX2pvaW4oZF9jaGlsZDAyKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBmYWN0b3Ioc3ViaWQpLAogICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSwKICAgICAgICAgY2FwV29yZGluZyA9IGZhY3Rvcihnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSksCiAgICAgICAgIHJlc3BvbnNlQ2F0ID0gZmFjdG9yKHJlc3BvbnNlLCBsZXZlbHMgPSBjKCJubyIsICJraW5kYSIsICJ5ZXMiKSksCiAgICAgICAgIHJlc3BvbnNlTnVtID0gaWZlbHNlKHJlc3BvbnNlID09ICJubyIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZXNwb25zZSA9PSAia2luZGEiLCAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmVzcG9uc2UgPT0gInllcyIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGFnZUdyb3VwID0gZmFjdG9yKGFnZUdyb3VwLCBsZXZlbHMgPSBjKCJhZHVsdCIsICJjaGlsZCIpKSkgJT4lCiAgZGlzdGluY3QoKQpgYGAKIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIG4gcGFydGljaXBhbnRzfQojIHRvdGFsIG4KZCAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgYWdlKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBtdXRhdGUoYWdlR3JvdXAyID0gaWZlbHNlKGFnZUdyb3VwID09ICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDcgfCBhZ2UgPiAxMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCBvZiBhZ2UgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pc3NpbmcgYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkIikpKSkgJT4lCiAgY291bnQoYWdlR3JvdXAyKQoKIyBkcm9wIGNoaWxkcmVuIG91dHNpZGUgb2YgdGFyZ2V0IGFnZSByYW5nZSAoNy05eSkKZDEgPC0gZCAlPiUKICBmaWx0ZXIoKGFnZSA+PSA3ICYgYWdlIDw9IDEwKSB8IGFnZUdyb3VwID09ICJhZHVsdCIpCgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgYWdlKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICAgIG11dGF0ZShhZ2VHcm91cDIgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgNyB8IGFnZSA+IDEwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0IG9mIGFnZSByYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQiKSkpKSAlPiUKICBjb3VudChhZ2VHcm91cDIpCmBgYAoKYGBge3IgY29uZGl0aW9ufQojIGNvbmRpdGlvbgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBjb3VudChhZ2VHcm91cCwgY2hhcmFjdGVyKQpgYGAKCmBgYHtyIGFnZX0KIyBhZ2UgCmQxICU+JSAKICBzZWxlY3QoYWdlR3JvdXAsIHN1YmlkLCBhZ2UpICU+JQogIGRpc3RpbmN0KC5rZWVwX2FsbCA9IFQpICU+JQogIGdyb3VwX2J5KGFnZUdyb3VwKSAlPiUKICBzdW1tYXJpc2UobWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2RfYWdlID0gc2QoYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWRpYW5fYWdlID0gbWVkaWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluX2FnZSA9IG1pbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlLCBuYS5ybSA9IFQpKQoKIyBwbG90IGNoaWxkcmVuJ3MgYWdlCnFwbG90KGQxICU+JSAKICAgICAgICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgICAgICAgZGlzdGluY3Qoc3ViaWQsIC5rZWVwX2FsbCA9IFQpICU+JSAKICAgICAgICBzZWxlY3QoYWdlKSwgYmlucyA9IDE4KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbWVkaWFuKGQxJGFnZVtkMSRhZ2VHcm91cCA9PSAiY2hpbGQiXSwgbmEucm0gPSBUKSwgY29sb3IgPSAicmVkIikKCiMgY2hlY2sgY2hpbGRyZW4ncyBhZ2UgYnkgY29uZGl0aW9uCmQxICU+JSAKICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIC5rZWVwX2FsbCA9IFQpICU+JSAKICBzZWxlY3QoYWdlLCBjaGFyYWN0ZXIpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlcikgJT4lIAogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oYWdlLCBuYS5ybSA9IFQpKQoKdC50ZXN0KGFnZSB+IGNoYXJhY3RlciwgCiAgICAgICBkMSAlPiUgCiAgICAgICAgIGZpbHRlcihhZ2VHcm91cCA9PSAiY2hpbGQiKSAlPiUKICAgICAgICAgc2VsZWN0KHN1YmlkLCBhZ2UsIGNoYXJhY3RlcikgJT4lIAogICAgICAgICBkaXN0aW5jdCkKCmdncGxvdChkMSAlPiUKICAgICAgICAgZmlsdGVyKGFnZUdyb3VwID09ICJjaGlsZCIpICU+JQogICAgICAgICBkaXN0aW5jdChzdWJpZCwgLmtlZXBfYWxsID0gVCkgJT4lIAogICAgICAgICBzZWxlY3QoYWdlLCBjaGFyYWN0ZXIpICU+JQogICAgICAgICBncm91cF9ieShjaGFyYWN0ZXIpICU+JQogICAgICAgICBtdXRhdGUobWVkaWFuX2FnZSA9IG1lZGlhbihhZ2UsIG5hLnJtID0gVCkpLAogICAgICAgYWVzKHggPSBhZ2UpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDkpICsKICBmYWNldF93cmFwKH4gY2hhcmFjdGVyKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbWVkaWFuKGQkYWdlW2QkYWdlR3JvdXAgPT0gImNoaWxkIl0sIG5hLnJtID0gVCksIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW5fYWdlLCBjb2xvciA9IGNoYXJhY3RlciksIGx0eSA9IDIpCmBgYAoKYGBge3IgZHVyYXRpb259CiMgZHVyYXRpb24KZDEgJT4lCiAgZ3JvdXBfYnkoYWdlR3JvdXApICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lZGlhbiA9IG1lZGlhbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCkpCgojIHBsb3QgZHVyYXRpb24gYnkgYWdlIGdyb3VwIGFuZCBjaGFyYWN0ZXIKZ2dwbG90KGQxLCBhZXMoc2Vzc2lvbkR1cmF0aW9uKSkgKwogIGZhY2V0X2dyaWQoY2hhcmFjdGVyIH4gYWdlR3JvdXApICsKICBnZW9tX2hpc3RvZ3JhbShicmVha3MgPSAwOjE1KQoKdC50ZXN0KHNlc3Npb25EdXJhdGlvbiB+IGNoYXJhY3RlciwKICAgICAgIGQxICU+JQogICAgICAgICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgICAgICAgIHNlbGVjdChzdWJpZCwgY2hhcmFjdGVyLCBzZXNzaW9uRHVyYXRpb24pICU+JQogICAgICAgICBsZWZ0X2pvaW4oZCAlPiUgc2VsZWN0KHN1YmlkLCBzZXNzaW9uRHVyYXRpb24pKSAlPiUKICAgICAgICAgbXV0YXRlKHN1YmlkID0gYXMuY2hhcmFjdGVyKHN1YmlkKSwKICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpLAogICAgICAgICAgICAgICAgc2Vzc2lvbkR1cmF0aW9uID0gcm91bmQoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoc2Vzc2lvbkR1cmF0aW9uKSksIDMpKSAlPiUKICAgICAgICAgZGlzdGluY3QoKSkKCnQudGVzdChzZXNzaW9uRHVyYXRpb24gfiBjaGFyYWN0ZXIsCiAgICAgICBkMSAlPiUKICAgICAgICAgZmlsdGVyKGFnZUdyb3VwID09ICJhZHVsdCIpICU+JQogICAgICAgICBzZWxlY3Qoc3ViaWQsIGNoYXJhY3Rlciwgc2Vzc2lvbkR1cmF0aW9uKSAlPiUKICAgICAgICAgbGVmdF9qb2luKGQgJT4lIHNlbGVjdChzdWJpZCwgc2Vzc2lvbkR1cmF0aW9uKSkgJT4lCiAgICAgICAgIG11dGF0ZShzdWJpZCA9IGFzLmNoYXJhY3RlcihzdWJpZCksCiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSwKICAgICAgICAgICAgICAgIHNlc3Npb25EdXJhdGlvbiA9IHJvdW5kKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHNlc3Npb25EdXJhdGlvbikpLCAzKSkgJT4lCiAgICAgICAgIGRpc3RpbmN0KCkpCmBgYAoKYGBge3IgZ2VuZGVyfQojIGdlbmRlcgpkMSAlPiUKICBzZWxlY3QoYWdlR3JvdXAsIHN1YmlkLCBnZW5kZXIpICU+JQogIGRpc3RpbmN0KC5rZWVwX2FsbCA9IFQpICU+JQogIGNvdW50KGFnZUdyb3VwLCBnZW5kZXIpCmBgYAoKYGBge3IgZXRobmljaXR5fQojIGV0aG5pY2l0eQpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgZXRobmljaXR5KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gdG9sb3dlcihldGhuaWNpdHkpKSAlPiUKICBtdXRhdGUoYmxhY2sgPSBncmVwbCgiYmxhY2siLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiYWZyaWNhbiBhbWVyaWNhbiIsIGV0aG5pY2l0eSksCiAgICAgICAgIGVhc3RfYXNpYW4gPSBncmVwbCgiZWFzdCBhc2lhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJlYXN0YXNpYW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiY2hpbmVzZSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJjaGluYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJrb3JlYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJqYXBhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJ0YWl3YW4iLCBldGhuaWNpdHkpLAogICAgICAgICBzb3V0aF9hc2lhbiA9IGdyZXBsKCJzb3V0aCBhc2lhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJzb3V0aGFzaWFuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoImluZGlhIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoInBha2lzdGFuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoImJhbmdsYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJzcmkgbGFua2EiLCBldGhuaWNpdHkpLAogICAgICAgICBsYXRpbm8gPSBncmVwbCgibGF0aW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiaGlzcGFuaWMiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgibWV4aWMiLCBldGhuaWNpdHkpLAogICAgICAgICBtaWRkbGVfZWFzdGVybiA9IGdyZXBsKCJtaWRkbGUiLCBldGhuaWNpdHkpLAogICAgICAgICBwYWNfaXNsYW5kID0gZ3JlcGwoInBhY2lmaWMiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiaGF3YWlpIiwgZXRobmljaXR5KSwKICAgICAgICAgbmF0aXZlX2FtID0gZ3JlcGwoIm5hdGl2ZWFtZXJpY2FuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoIm5hdGl2ZSBhbWVyaWNhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJhbWVyaWNhbiBpbmRpYW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiYWxhc2thIG5hdGl2ZSIsIGV0aG5pY2l0eSksCiAgICAgICAgIHdoaXRlID0gZ3JlcGwoIndoaXRlIiwgZXRobmljaXR5KSwKICAgICAgICAgb3RoZXIgPSBncmVwbCgib3RoZXIiLCBldGhuaWNpdHkpKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBnYXRoZXIoZXRobmljaXR5VEYsIFRGLCAtc3ViaWQsIC1ldGhuaWNpdHksIC1hZ2VHcm91cCkgJT4lCiAgZmlsdGVyKFRGKSAlPiUKICBjb3VudChhZ2VHcm91cCwgZXRobmljaXR5VEYpCgojIE5PVEU6IG5vdCBtdXR1YWxseSBleGNsdXNpdmUhIQoKIyBtdXR1YWxseSBleGNsdXNpdmUgdmVyc2lvbgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgZXRobmljaXR5KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gdG9sb3dlcihldGhuaWNpdHkpKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBtdXRhdGUoZXRobmljaXR5MiA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiLCIsIGV0aG5pY2l0eSksICJtdWx0aXBsZSIsIGV0aG5pY2l0eSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCI7IiwgZXRobmljaXR5KSwgIm11bHRpcGxlIiwgZXRobmljaXR5KSkpICU+JSAKICBtdXRhdGUoZXRobmljaXR5MyA9IGlmZWxzZShncmVwbCgib3RoZXIiLCBldGhuaWNpdHkyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIi8iLCBldGhuaWNpdHkyKSB8IGdyZXBsKCJtaXgiLCBldGhuaWNpdHkyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCJhc2lhbiIsIGV0aG5pY2l0eTIpIHwgZ3JlcGwoImtvcmVhbiIsIGV0aG5pY2l0eTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVhc3QgYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljaXR5MikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY2l0eTIpKSAlPiUKICBjb3VudChhZ2VHcm91cCwgZXRobmljaXR5MykgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KGFnZUdyb3VwKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBhcnJhbmdlKGFnZUdyb3VwLCBkZXNjKG4pKQpgYGAKCmBgYHtyIG1pc3NpbmcgZGF0YX0KIyBleHBlcmltaW5ldGVyIGVycm9yCmRfY2hpbGQwMSAlPiUgIyB1c2UgZF9jaGlsZDAxIChiZWZvcmUgZHJvcHBpbmcgbiA9IDEgY2hpbGQgaW4gImVsZXBoYW50IiBjb25kaXRpb24pCiAgZmlsdGVyKCEoY2hhcmFjdGVyICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpKSAlPiUKICBzZWxlY3Qoc3ViaWQpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG4vMjAwKQoKIyBpbmNvbXBsZXRlIHRyaWFscyAoInNraXAiLCAiYmFpbCIpCmQxICU+JSAjIHVzZSBkMSAoYmVmb3JlIGRyb3BwaW5nIHRyaWFscyB3aXRoIHJ0ID4gMjUwbXMpIAogIGNvdW50KGFnZUdyb3VwLCBzdWJpZCkgJT4lCiAgZmlsdGVyKG4gIT0gNDApICU+JQogIG11dGF0ZShuX21pc3NpbmcgPSA0MC1uKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgc3VtbWFyaXNlKHN1bV9taXNzaW5nID0gc3VtKG5fbWlzc2luZykpICU+JQogIG11dGF0ZShwZXJjZW50ID0gc3VtX21pc3NpbmcvODAwMCkKCiMgdHJpYWxzIHdpdGggcnQgPiAyNTBtcwpkMSAlPiUKICBmaWx0ZXIocnQgPCAyNTApICU+JQogIGNvdW50KGFnZUdyb3VwKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG4vODAwMCkKCiMgYWxsIG1pc3NpbmcgdHJpYWxzCmQxICU+JSAjIHVzZSBkMSAoYmVmb3JlIGRyb3BwaW5nIHRyaWFscykgCiAgY291bnQoYWdlR3JvdXAsIHN1YmlkKSAlPiUKICBmaWx0ZXIobiAhPSA0MCkgJT4lCiAgbXV0YXRlKG5fTkEgPSA0MC1uKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgc3VtbWFyaXNlKG5fTkEgPSBzdW0obl9OQSkpICU+JQogIG11dGF0ZShwZXJjZW50X05BID0gbl9OQS84MDAwKSAlPiUKICBmdWxsX2pvaW4oZDEgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHJ0IDwgMjUwKSAlPiUKICAgICAgICAgICAgICBjb3VudChhZ2VHcm91cCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKG5fZmFzdCA9IG4pICU+JQogICAgICAgICAgICAgIG11dGF0ZShwZXJjZW50X2Zhc3QgPSBuX2Zhc3QvODAwMCkpICU+JQogIG11dGF0ZShuX21pc3NpbmdfVE9UQUwgPSBuX05BICsgbl9mYXN0LAogICAgICAgICBwZXJjZW50X21pc3NpbmdfVE9UQUwgPSBwZXJjZW50X05BICsgcGVyY2VudF9mYXN0KQogIApgYGAKCiMgRGF0YSBwcmVwYXJhdGlvbgoKIyMgRmlsdGVyIFJUcwoKYGBge3IgZmlsdGVyIFJUcywgcHJlcCBkYXRhZnJhbWV9CiMgZXhhbWluZSBhbmQgZmlsdGVyIGJ5IFJUcwpnZ3Bsb3QoZDEpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeCA9IHJ0KSwgYmlucyA9IDEwMCkgKwogIGZhY2V0X3dyYXAofmFnZUdyb3VwKSArCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBzZXEoMCwgMTAwMCwgMTAwKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDI1MCwgY29sb3IgPSAicmVkIikKCmQyIDwtIGQxICU+JQogIGZpbHRlcighKHJ0IDwgMjUwKSB8IGlzLm5hKHJ0KSkgIyBwcmVzZXQgY3JpdGVyaW9uIG9mIDI1MG1zCmBgYAoKIyMgTG9vayBhdCBob3ZlciB0aW1lCgpgYGB7ciBob3ZlciB0aW1lfQpkMiAlPiUKICBmaWx0ZXIoIShjYXBhY2l0eSAlaW4lIGMoInBlcnNvbmFsaXR5IiwgImJlbGllZnMiLCAicGxlYXN1cmUiLCAiZGVzaXJlcyIsICJzZWxmX3Jlc3RyYWludCIsICJnb2FscyIsICJuYXVzZWF0ZWQiKSkpICU+JQogIG11dGF0ZShub0hvdmVyID0gaG92ZXJUaW1lID09IDApICU+JQogIGNvdW50KGFnZUdyb3VwLCBub0hvdmVyKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgbXV0YXRlKHBlcmNlbnQgPSBuL3N1bShuKSkKCmdncGxvdChkMiwgYWVzKHggPSBob3ZlclRpbWUpKSArCiAgZmFjZXRfZ3JpZCh+IGFnZUdyb3VwKSArCiAgZ2VvbV9oaXN0b2dyYW0oKQpgYGAKCiMjIFByZXBhcmUgZGF0YSBmb3IgRUZBCgpgYGB7ciBwcmVwIGZvciBlZmF9CiMgZmluaXNoIHRpZHlpbmcKZDMgPC0gZDIgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCByZXNwb25zZU51bSwgc3ViaWQpICU+JQogIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pCgojIG1ha2UgY29tYmluZWQgZGF0YXNldApkM19jb21iaW5lZCA8LSBkYXRhLmZyYW1lKGQzWywtMV0sIHJvdy5uYW1lcyA9IGQzWywxXSkKCiMgbWFrZSBzZXBhcmF0ZSBjaGlsZCBhbmQgYWR1bHQgZGF0YXNldHMKZDNfYWR1bHQgPC0gZDMgJT4lCiAgbGVmdF9qb2luKGQgJT4lIHNlbGVjdChzdWJpZCwgYWdlR3JvdXApKSAlPiUKICBmaWx0ZXIoYWdlR3JvdXAgPT0gImFkdWx0IikgJT4lCiAgc2VsZWN0KC1hZ2VHcm91cCkgJT4lCiAgZGlzdGluY3QoKQpkM19hZHVsdCA8LSBkYXRhLmZyYW1lKGQzX2FkdWx0WywtMV0sIHJvdy5uYW1lcyA9IGQzX2FkdWx0WywxXSkKCmQzX2NoaWxkIDwtIGQzICU+JQogIGxlZnRfam9pbihkICU+JSBzZWxlY3Qoc3ViaWQsIGFnZUdyb3VwKSkgJT4lCiAgZmlsdGVyKGFnZUdyb3VwID09ICJjaGlsZCIpICU+JQogIHNlbGVjdCgtYWdlR3JvdXApICU+JQogIGRpc3RpbmN0KCkKZDNfY2hpbGQgPC0gZGF0YS5mcmFtZShkM19jaGlsZFssLTFdLCByb3cubmFtZXMgPSBkM19jaGlsZFssMV0pCmBgYAoKIyMgR2VuZXJhbCBhbmFseXNpcyBzZXR0aW5ncwoKYGBge3IgYW5hbHlzaXMgc2V0dGluZ3N9CiMgc2V0IGNvcnJlbGF0aW9uIHR5cGU6IHBlYXJzb24gb3IgcG9seWNob3JpYz8KY29yX3R5cGUgPC0gImNvciIKIyBjb3JfdHlwZSA8LSAicG9seSIKCiMgc2V0IHJvdGF0aW9uIHR5cGU6IHZhcmltYXggb3Igb2JsaW1pbj8Kcm90X3R5cGUgPC0gInZhcmltYXgiCiMgcm90X3R5cGUgPC0gIm9ibGltaW4iCgojIHNldCBzY29yZSB0eXBlCiMgc2NvcmVfdHlwZSA8LSAicmVncmVzc2lvbiIKIyBzY29yZV90eXBlIDwtICJUaHVyc3RvbmUiCnNjb3JlX3R5cGUgPC0gInRlbkJlcmdlIgojIHNjb3JlX3R5cGUgPC0gIkFuZGVyc29uIgojIHNjb3JlX3R5cGUgPC0gIkJhcnRsZXR0IgojIHNjb3JlX3R5cGUgPC0gIkhhcm1hbiIKYGBgCgojIEFkdWx0cyBhbG9uZQoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSB1bnJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBhZHVsdHMgbWF4aW1hbCB1bnJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9hZHVsdF9tYXhfdW5yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9ICJub25lIiwgY29yID0gY29yX3R5cGUpCmVmYV9hZHVsdF9tYXhfdW5yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9hZHVsdF9tYXhfdW5yb3RfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2FkdWx0X21heF91bnJvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9hZHVsdF9tYXhfdW5yb3RfbmZhY3RvcnMgPC0gZWZhX2FkdWx0X21heF91bnJvdF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9hZHVsdF9tYXhfdW5yb3RfbmZhY3RvcnMKCiMgbWFudWFsbHkgY2hlY2sgdGhhdCBlYWNoIGZhY3RvciBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2FkdWx0X21heF91bnJvdF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9hZHVsdF9tYXhfdW5yb3QpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzZWxlY3QoMTplZmFfYWR1bHRfbWF4X3Vucm90X25mYWN0b3JzKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMywgRjQgPSBNUjQpICU+JSAjIGFkanVzdCBieSBoYW5kIGFzIG5lZWRlZAogIG11dGF0ZShGMV9hYnMgPSBhYnMoRjEpLAogICAgICAgICBGMl9hYnMgPSBhYnMoRjIpLAogICAgICAgICBGM19hYnMgPSBhYnMoRjMpLAogICAgICAgICBGNF9hYnMgPSBhYnMoRjQpLAogICAgICAgICBsb2FkaW5nX2FicyA9IHBtYXgoRjFfYWJzLCBGMl9hYnMsIEYzX2FicywgRjRfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjQpLCBGNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEY0LCAiRjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjQsICJGYWN0b3IgNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKQoKZWZhX2FkdWx0X21heF91bnJvdF9sb2FkaW5ncyAlPiUgY291bnQoZmFjdG9yTmFtZSkgIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCgojIHJlc2V0IGFzIG5lZWRlZAplZmFfYWR1bHRfbWF4X3Vucm90X25mYWN0b3JzIDwtIGVmYV9hZHVsdF9tYXhfdW5yb3RfbG9hZGluZ3MgJT4lIGNvdW50KGZhY3Rvck5hbWUpICU+JSBucm93KCkKYGBgCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgYWR1bHRzIG1heGltYWwgcm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2FkdWx0X21heF9yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9IHJvdF90eXBlLCBjb3IgPSBjb3JfdHlwZSkKZWZhX2FkdWx0X21heF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9hZHVsdF9tYXhfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9hZHVsdF9tYXhfcm90KSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKZWZhX2FkdWx0X21heF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyBTbWFsbCByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgYWR1bHRzIHNtYWxsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9hZHVsdF9zbWFsbF9yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gZWZhX2FkdWx0X21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfYWR1bHRfc21hbGxfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfYWR1bHRfc21hbGxfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9hZHVsdF9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfYWR1bHRfc21hbGxfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMjIExvYWRpbmdzCgpgYGB7ciBlZmEgYWR1bHRzIHNtYWxsIHJvdGF0ZWQgbG9hZGluZ3N9CiMgbWFrZSBkYXRhZnJhbWUgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MgYW5kIGRvbWluYW50IGZhY3RvcgplZmFfYWR1bHRfc21hbGxfcm90X2xvYWRpbmdzIDwtIGVmYV9hZHVsdF9zbWFsbF9yb3QkbG9hZGluZ3NbXSAlPiUKICBmYS5zb3J0KCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMykgJT4lICMgYWRqdXN0IGJ5IGhhbmQgYXMgbmVlZGVkCiAgbXV0YXRlKEYxX2FicyA9IGFicyhGMSksCiAgICAgICAgIEYyX2FicyA9IGFicyhGMiksCiAgICAgICAgIEYzX2FicyA9IGFicyhGMyksCiAgICAgICAgIGxvYWRpbmdfYWJzID0gcG1heChGMV9hYnMsIEYyX2FicywgRjNfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3IgPSBpZmVsc2UobG9hZGluZyA9PSBGMSwgIkYxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgICAgICAgZmFjdG9yTmFtZSA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRmFjdG9yIDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRmFjdG9yIDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZyA9PSBGMywgIkZhY3RvciAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSAlPiUKICBzZWxlY3QoY2FwYWNpdHksIEYxLCBGMiwgRjMsIGZhY3RvciwgZmFjdG9yTmFtZSwgbG9hZGluZywgbG9hZGluZ19hYnMpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKGQgJT4lIHNlbGVjdChjYXBhY2l0eSwgY2FwV29yZGluZykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nID0gZ3N1YigiXFwgIiwgIl8iLCBnc3ViKCIgLS0uKiIsICIiLCBjYXBXb3JkaW5nKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgY2FwV29yZGluZywgRjE6bG9hZGluZ19hYnMpICU+JQogIGRpc3RpbmN0KCkKCiMgcHJpbnQgb3V0IGxpc3Qgb2YgaXRlbXMgYnkgZG9taW5hbnQgZmFjdG9yCmVmYV9hZHVsdF9zbWFsbF9yb3RfaXRlbXMgPC0gZWZhX2FkdWx0X3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nUGx1cyA9IGlmZWxzZShsb2FkaW5nID4gMCwgY2FwV29yZGluZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChjYXBXb3JkaW5nLCAiIChuZWdhdGl2ZSBsb2FkaW5nKSIpKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UoaXRlbXMgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nUGx1cywgY29sbGFwc2UgPSAiLCAiKSkpCmhlYWQoZWZhX2FkdWx0X3NtYWxsX3JvdF9pdGVtcyRpdGVtcywgNDApCmBgYAoKIyBDaGlsZHJlbiBhbG9uZQoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSB1bnJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBjaGlsZHJlbiBtYXhpbWFsIHVucm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2NoaWxkX21heF91bnJvdCA8LSBmYShkM19jaGlsZCwgbmZhY3RvcnMgPSAxMywgcm90YXRlID0gIm5vbmUiLCBjb3IgPSBjb3JfdHlwZSkKZWZhX2NoaWxkX21heF91bnJvdAoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2NoaWxkX21heF91bnJvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY2hpbGRfbWF4X3Vucm90KSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycyA8LSBlZmFfY2hpbGRfbWF4X3Vucm90X2VpZ2VudmFsdWVzICU+JQogIGZpbHRlcihTUy5sb2FkaW5ncyA+IDEsIFByb3BvcnRpb24uRXhwbGFpbmVkID4gMC4wNSkgJT4lCiAgY291bnQoKSAlPiUKICBhcy5udW1lcmljKCkKZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycwoKIyBtYW51YWxseSBjaGVjayB0aGF0IGVhY2ggZmFjdG9yIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfY2hpbGRfbWF4X3Vucm90X2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2NoaWxkX21heF91bnJvdClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHNlbGVjdCgxOmVmYV9jaGlsZF9tYXhfdW5yb3RfbmZhY3RvcnMpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCgplZmFfY2hpbGRfbWF4X3Vucm90X2xvYWRpbmdzICU+JSBjb3VudChmYWN0b3JOYW1lKSAjIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKCiMgcmVzZXQgYXMgbmVlZGVkCmVmYV9jaGlsZF9tYXhfdW5yb3RfbmZhY3RvcnMgPC0gZWZhX2NoaWxkX21heF91bnJvdF9sb2FkaW5ncyAlPiUgY291bnQoZmFjdG9yTmFtZSkgJT4lIG5yb3coKQpgYGAKCiMjIyBNYXhpbWFsICgxMy1mYWN0b3IpIHJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBjaGlsZHJlbiBtYXhpbWFsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9jaGlsZF9tYXhfcm90IDwtIGZhKGQzX2NoaWxkLCBuZmFjdG9ycyA9IDEzLCByb3RhdGUgPSByb3RfdHlwZSwgY29yID0gY29yX3R5cGUpCmVmYV9jaGlsZF9tYXhfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfY2hpbGRfbWF4X3JvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY2hpbGRfbWF4X3JvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCmVmYV9jaGlsZF9tYXhfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMgU21hbGwgcm90YXRlZCBzb2x1dGlvbgoKYGBge3IgZWZhIGNoaWxkcmVuIHNtYWxsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9jaGlsZF9zbWFsbF9yb3QgPC0gZmEoZDNfY2hpbGQsIG5mYWN0b3JzID0gZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfY2hpbGRfc21hbGxfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfY2hpbGRfc21hbGxfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9jaGlsZF9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfY2hpbGRfc21hbGxfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMjIExvYWRpbmdzCgpgYGB7ciBlZmEgY2hpbGRyZW4gc21hbGwgcm90YXRlZCBsb2FkaW5nc30KIyBtYWtlIGRhdGFmcmFtZSBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncyBhbmQgZG9taW5hbnQgZmFjdG9yCmVmYV9jaGlsZF9zbWFsbF9yb3RfbG9hZGluZ3MgPC0gZWZhX2NoaWxkX3NtYWxsX3JvdCRsb2FkaW5nc1tdICU+JQogIGZhLnNvcnQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgRjEsIEYyLCBGMywgZmFjdG9yLCBmYWN0b3JOYW1lLCBsb2FkaW5nLCBsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZCAlPiUgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nLCBGMTpsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKQoKIyBwcmludCBvdXQgbGlzdCBvZiBpdGVtcyBieSBkb21pbmFudCBmYWN0b3IKZWZhX2NoaWxkX3NtYWxsX3JvdF9pdGVtcyA8LSBlZmFfY2hpbGRfc21hbGxfcm90X2xvYWRpbmdzICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGxvYWRpbmdfYWJzKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmdQbHVzID0gaWZlbHNlKGxvYWRpbmcgPiAwLCBjYXBXb3JkaW5nLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKGNhcFdvcmRpbmcsICIgKG5lZ2F0aXZlIGxvYWRpbmcpIikpKSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JQogIHN1bW1hcmlzZShpdGVtcyA9IGdzdWIoIl8iLCAiICIsIHBhc3RlKGNhcFdvcmRpbmdQbHVzLCBjb2xsYXBzZSA9ICIsICIpKSkKaGVhZChlZmFfY2hpbGRfc21hbGxfcm90X2l0ZW1zJGl0ZW1zLCA0MCkKYGBgCgojIENvbWJpbmVkIGRhdGFzZXQ6IENoaWxkcmVuICYgYWR1bHRzCgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBNYXhpbWFsICgxMy1mYWN0b3IpIHVucm90YXRlZCBzb2x1dGlvbgoKYGBge3IgZWZhIGNvbWJpbmVkIG1heGltYWwgdW5yb3RhdGVkfQojIGRvIGZhY3RvciBhbmFseXNpcwplZmFfY29tYl9tYXhfdW5yb3QgPC0gZmEoZDNfY29tYmluZWQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9ICJub25lIiwgY29yID0gY29yX3R5cGUpCmVmYV9jb21iX21heF91bnJvdAoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2NvbWJfbWF4X3Vucm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9jb21iX21heF91bnJvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycyA8LSBlZmFfY29tYl9tYXhfdW5yb3RfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfY29tYl9tYXhfdW5yb3RfbmZhY3RvcnMKCiMgbWFudWFsbHkgY2hlY2sgdGhhdCBlYWNoIGZhY3RvciBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2NvbWJfbWF4X3Vucm90X2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2NvbWJfbWF4X3Vucm90KVtdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgc2VsZWN0KDE6ZWZhX2NvbWJfbWF4X3Vucm90X25mYWN0b3JzKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMykgJT4lICMgYWRqdXN0IGJ5IGhhbmQgYXMgbmVlZGVkCiAgbXV0YXRlKEYxX2FicyA9IGFicyhGMSksCiAgICAgICAgIEYyX2FicyA9IGFicyhGMiksCiAgICAgICAgIEYzX2FicyA9IGFicyhGMyksCiAgICAgICAgIGxvYWRpbmdfYWJzID0gcG1heChGMV9hYnMsIEYyX2FicywgRjNfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3IgPSBpZmVsc2UobG9hZGluZyA9PSBGMSwgIkYxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgICAgICAgZmFjdG9yTmFtZSA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRmFjdG9yIDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRmFjdG9yIDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZyA9PSBGMywgIkZhY3RvciAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKQoKZWZhX2NvbWJfbWF4X3Vucm90X2xvYWRpbmdzICU+JSBjb3VudChmYWN0b3JOYW1lKSAjIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKYGBgCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgY29tYmluZWQgbWF4aW1hbCByb3RhdGVkfQojIGRvIGZhY3RvciBhbmFseXNpcwplZmFfY29tYl9tYXhfcm90IDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IDEzLCByb3RhdGUgPSByb3RfdHlwZSwgY29yID0gY29yX3R5cGUpCmVmYV9jb21iX21heF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9jb21iX21heF9yb3RfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2NvbWJfbWF4X3JvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCmVmYV9jb21iX21heF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyBTbWFsbCByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgY29tYmluZWQgc21hbGwgcm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2NvbWJfc21hbGxfcm90IDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfY29tYl9zbWFsbF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9jb21iX3NtYWxsX3JvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY29tYl9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfY29tYl9zbWFsbF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyMgTG9hZGluZ3MKCmBgYHtyIGVmYSBjb21iaW5lZCBzbWFsbCByb3RhdGVkIGxvYWRpbmdzfQojIG1ha2UgZGF0YWZyYW1lIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzIGFuZCBkb21pbmFudCBmYWN0b3IKZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzIDwtIGVmYV9jb21iX3NtYWxsX3JvdCRsb2FkaW5nc1tdICU+JQogIGZhLnNvcnQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgRjEsIEYyLCBGMywgZmFjdG9yLCBmYWN0b3JOYW1lLCBsb2FkaW5nLCBsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZCAlPiUgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nLCBGMTpsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKQoKIyBwcmludCBvdXQgbGlzdCBvZiBpdGVtcyBieSBkb21pbmFudCBmYWN0b3IKZWZhX2NvbWJfc21hbGxfcm90X2l0ZW1zIDwtIGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nUGx1cyA9IGlmZWxzZShsb2FkaW5nID4gMCwgY2FwV29yZGluZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChjYXBXb3JkaW5nLCAiIChuZWdhdGl2ZSBsb2FkaW5nKSIpKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UoaXRlbXMgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nUGx1cywgY29sbGFwc2UgPSAiLCAiKSkpCmhlYWQoZWZhX2NvbWJfc21hbGxfcm90X2l0ZW1zJGl0ZW1zLCA0MCkKYGBgCgojIFJlZ3Jlc3Npb24gb24gZmFjdG9yIHNjb3JlcwoKIyMgQ2hpbGRyZW4gdnMuIGFkdWx0cwoKYGBge3IgcmVncmVzc2lvbiBhZ2UgZ3JvdXAgZGF0YSBwcmVwfQpzY29yZXNfYWxsIDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImNoaWxkIikpKQoKY29sbmFtZXMoc2NvcmVzX2FsbClbMjo0XSA8LSBjKCJzY29yZV9GMSIsICJzY29yZV9GMiIsICJzY29yZV9GMyIpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZ2UgZ3JvdXAgYW5hbHlzaXN9CiMgYW5hbHl6ZQpzY29yZXNfYWxsX2FuYWx5c2lzIDwtIGQgJT4lCiAgc2VsZWN0KHN1YmlkLCBhZ2VHcm91cCwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGxlZnRfam9pbihzY29yZXNfYWxsKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCiMgc2V0IGNvbnRyYXN0cwpjb250cmFzdHMoc2NvcmVzX2FsbF9hbmFseXNpcyRmYWN0b3IpIDwtIGNiaW5kKEYxID0gYygxLCAtMSwgMCksICMgTUFLRSBTVVJFIFRPIERPVUJMRS1DSEVDSyEhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjMgPSBjKDAsIC0xLCAxKSkKY29udHJhc3RzKHNjb3Jlc19hbGxfYW5hbHlzaXMkY2hhcmFjdGVyKSA8LSBjYmluZChyb2JvdCA9IGMoLTEsIDEpKQpjb250cmFzdHMoc2NvcmVzX2FsbF9hbmFseXNpcyRhZ2VHcm91cCkgPC0gY2JpbmQoY2hpbGQgPSBjKC0xLCAxKSkKCnIxIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FsbF9hbmFseXNpcykKcjIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCnIzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzKQphbm92YShyMSwgcjIsIHIzKQojIHN1bW1hcnkocjEpCiMgc3VtbWFyeShyMikKc3VtbWFyeShyMykKCnJvdW5kKHNpZ25pZihzdW1tYXJ5KHIzKSRjb2VmZmljaWVudHMsIDMpLCAyKSAlPiUgZGF0YS5mcmFtZSgpICMgJT4lIFZpZXcoKQoKIyBzdGVwd2lzZSByZWdyZXNzaW9uCmRyb3AxKHIzLCB0ZXN0ID0gIkNoaXNxIikKcjNfc3RlcDIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgY2hhcmFjdGVyOmFnZUdyb3VwICsgZmFjdG9yOmFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCmRyb3AxKHIzX3N0ZXAyLCB0ZXN0ID0gIkNoaXNxIikKcjNfc3RlcDMgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgZmFjdG9yOmFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCmRyb3AxKHIzX3N0ZXAzLCB0ZXN0ID0gIkNoaXNxIikKCiMgIyByb2JvdCBvbmx5CiMgcm9ib3RfcjEgPC0gbG1lcihzY29yZSB+IGZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3IyIDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKyBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3IzIDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKiBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIGFub3ZhKHJvYm90X3IxLCByb2JvdF9yMiwgcm9ib3RfcjMpCiMgIyBzdW1tYXJ5KHJvYm90X3IxKQojICMgc3VtbWFyeShyb2JvdF9yMikKIyBzdW1tYXJ5KHJvYm90X3IzKQpgYGAKCmBgYHtyIHJlZ3Jlc3Npb24gYWdlIGdyb3VwIHBsb3R9CnNjb3Jlc19hbGxfcGxvdHRpbmcgPC0gZCAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZUdyb3VwLCBjaGFyYWN0ZXIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKHNjb3Jlc19hbGwpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShzY29yZV9GMSksICFpcy5uYShzY29yZV9GMiksICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2VHcm91cCIsICJjaGFyYWN0ZXIiLCAiZmFjdG9yIiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCiMgcGxvdApnZ3Bsb3Qoc2NvcmVzX2FsbF9wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgICAgICAgIGFnZUdyb3VwID0gZmFjdG9yKGFnZUdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYWR1bHQiLCAiY2hpbGQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImFkdWx0cyIsICJjaGlsZHJlbiIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxldmVscyA9IGMoImNoaWxkIiwgImFkdWx0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxhYmVscyA9IGMoImNoaWxkcmVuIiwgImFkdWx0cyIpKSksCiAgICAgICBhZXMoeCA9IGFnZUdyb3VwLCB5ID0gbWVhbiwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAoImZhY3RvciIsIG5jb2wgPSAzKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ2VvbV9wb2ludChzaXplID0gNSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgd2lkdGggPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjQpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTksIDE1KSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcyBieSBhZ2UgZ3JvdXAiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJBZHVsdHMgKFN0dWR5IDEpIHZzLiBjaGlsZHJlbiAoU3R1ZHkgMilcbiIsCiAgICAgICB4ID0gIkFnZSBncm91cCIsCiAgICAgICB5ID0gIk1lYW4gZmFjdG9yIHNjb3JlIikgIyAxMDAwIGJ5IDUwMApgYGAKCiMjIENoaWxkcmVuIGJ5IGFnZSBhdCB0ZXN0CgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IGRhdGEgcHJlcH0Kc2NvcmVzX2NoaWxkcmVuIDwtIGZhKGQzX2NoaWxkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImNoaWxkIikpKQoKY29sbmFtZXMoc2NvcmVzX2NoaWxkcmVuKVsyOjRdIDwtIGMoInNjb3JlX0YxIiwgInNjb3JlX0YyIiwgInNjb3JlX0YzIikKYGBgCgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IGFuYWx5c2lzfQojIGFuYWx5emUKc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzIDwtIGQgJT4lCiAgc2VsZWN0KHN1YmlkLCBhZ2UsIGNoYXJhY3RlcikgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBsZWZ0X2pvaW4oc2NvcmVzX2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCiMgc2V0IGNvbnRyYXN0cwpjb250cmFzdHMoc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzJGZhY3RvcikgPC0gY2JpbmQoRjEgPSBjKDEsIC0xLCAwKSwgIyBNQUtFIFNVUkUgVE8gRE9VQkxFLUNIRUNLISEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMyA9IGMoMCwgLTEsIDEpKQpjb250cmFzdHMoc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzJGNoYXJhY3RlcikgPC0gY2JpbmQocm9ib3QgPSBjKC0xLCAxKSkKCnI0IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpyNSA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCnI2IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBzY2FsZShhZ2UpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcykKYW5vdmEocjQsIHI1LCByNikKIyBzdW1tYXJ5KHI0KQojIHN1bW1hcnkocjUpCnN1bW1hcnkocjYpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjYsIHRlc3QgPSAiQ2hpc3EiKQpyNl9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArIGNoYXJhY3RlcjpzY2FsZShhZ2UpICsgZmFjdG9yOnNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpkcm9wMShyNl9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnN1bW1hcnkocjZfc3RlcDIpCgojIGV4cGxvcmUgcG9seW5vaWFsIGVmZmVjdHMgb2YgYWdlCnI2YiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDEpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcykKcjcgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHBvbHkoYWdlLCAyKSArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCnI4IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQphbm92YShyNmIsIHI3LCByOCkKIyBzdW1tYXJ5KHI2YikKIyBzdW1tYXJ5KHI3KQpzdW1tYXJ5KHI4KQoKcm91bmQoc2lnbmlmKHN1bW1hcnkocjYpJGNvZWZmaWNpZW50cywgMyksIDIpICU+JSBkYXRhLmZyYW1lKCkgIyAlPiUgVmlldygpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjgsIHRlc3QgPSAiQ2hpc3EiKQpyOF9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDIpICsgcG9seShhZ2UsIDMpICsgcG9seShhZ2UsIDMpOmNoYXJhY3RlciArIHBvbHkoYWdlLCAzKTpmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSArIHBvbHkoYWdlLCAyKSArIGNoYXJhY3Rlcjpwb2x5KGFnZSwgMikgKyBmYWN0b3I6cG9seShhZ2UsIDIpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCmRyb3AxKHI4X3N0ZXAzLCB0ZXN0ID0gIkNoaXNxIikKc3VtbWFyeShyOF9zdGVwMykKCiMgIyByb2JvdCBvbmx5CiMgcm9ib3RfcjQgPC0gbG1lcihzY29yZSB+IGZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gInJvYm90IikpCiMgcm9ib3RfcjUgPC0gbG1lcihzY29yZSB+IGZhY3RvciArIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3I2IDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKiBzY2FsZShhZ2UpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcyAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSAicm9ib3QiKSkKIyBhbm92YShyb2JvdF9yNCwgcm9ib3RfcjUsIHJvYm90X3I2KQojICMgc3VtbWFyeShyb2JvdF9yNCkKIyAjIHN1bW1hcnkocm9ib3RfcjUpCiMgc3VtbWFyeShyb2JvdF9yNikKYGBgCgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IHBsb3R9CnNjb3Jlc19jaGlsZHJlbl9wbG90dGluZyA8LSBkICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBjaGFyYWN0ZXIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKHNjb3Jlc19jaGlsZHJlbikgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZSkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2UiLCAiY2hhcmFjdGVyIiwgImZhY3RvciIpLAogICAgICAgICAgICAgc3RhdGlzdGljc19mdW5jdGlvbnMgPSBjKCJtZWFuIiwgImNpX2xvd2VyIiwgImNpX3VwcGVyIikpCgojIHBsb3QKZ2dwbG90KHNjb3Jlc19jaGlsZHJlbl9wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSksCiAgICAgICBhZXMoeCA9IGFnZSwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGNoaWxkcmVuJ3MgYWdlIiwKICAgICAgICMgc3VidGl0bGUgPSAiQ2hpbGRyZW4gKFN0dWR5IDIpXG4iLAogICAgICAgeCA9ICJBZ2UgKHllYXJzKSIsCiAgICAgICB5ID0gIkZhY3RvciBzY29yZSIpICMgMTAwMCBieSA1MDAKYGBgCgojIyBBZHVsdHMgYnkgYWdlIGF0IHRlc3QKCmBgYHtyIHJlZ3Jlc3Npb24gYWR1bHQgYWdlIGF0IHRlc3QgZGF0YSBwcmVwfQpzY29yZXNfYWR1bHRzIDwtIGZhKGQzX2FkdWx0LCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImFkdWx0IikpKQoKY29sbmFtZXMoc2NvcmVzX2FkdWx0cylbMjo0XSA8LSBjKCJzY29yZV9GMSIsICJzY29yZV9GMiIsICJzY29yZV9GMyIpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZHVsdCBhZ2UgYXQgdGVzdCBhbmFseXNpc30KIyBhbmFseXplCnNjb3Jlc19hZHVsdHNfYW5hbHlzaXMgPC0gZCAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGxlZnRfam9pbihzY29yZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2UpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoInNjb3JlXyIpKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvcikpCgojIHNldCBjb250cmFzdHMKY29udHJhc3RzKHNjb3Jlc19hZHVsdHNfYW5hbHlzaXMkZmFjdG9yKSA8LSBjYmluZChGMSA9IGMoMSwgLTEsIDApLCAjIE1BS0UgU1VSRSBUTyBET1VCTEUtQ0hFQ0shIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYzID0gYygwLCAtMSwgMSkpCmNvbnRyYXN0cyhzY29yZXNfYWR1bHRzX2FuYWx5c2lzJGNoYXJhY3RlcikgPC0gY2JpbmQocm9ib3QgPSBjKC0xLCAxKSkKCnI0IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKcjUgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKcjYgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKYW5vdmEocjQsIHI1LCByNikKIyBzdW1tYXJ5KHI0KQojIHN1bW1hcnkocjUpCnN1bW1hcnkocjYpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjYsIHRlc3QgPSAiQ2hpc3EiKQpyNl9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArIGNoYXJhY3RlcjpzY2FsZShhZ2UpICsgZmFjdG9yOnNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKZHJvcDEocjZfc3RlcDIsIHRlc3QgPSAiQ2hpc3EiKQpzdW1tYXJ5KHI2X3N0ZXAyKQoKIyBleHBsb3JlIHBvbHlub2lhbCBlZmZlY3RzIG9mIGFnZQpyNmIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHBvbHkoYWdlLCAxKSArICgxIHwgc3ViaWQpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpyNyA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDIpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hZHVsdHNfYW5hbHlzaXMpCnI4IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKYW5vdmEocjZiLCByNywgcjgpCiMgc3VtbWFyeShyNmIpCnN1bW1hcnkocjcpCnN1bW1hcnkocjgpCgpyb3VuZChzaWduaWYoc3VtbWFyeShyNikkY29lZmZpY2llbnRzLCAzKSwgMikgJT4lIGRhdGEuZnJhbWUoKSAjICU+JSBWaWV3KCkKCiMgc3RlcHdpc2UgcmVncmVzc2lvbgpkcm9wMShyOCwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAyIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMikgKyBwb2x5KGFnZSwgMykgKyBwb2x5KGFnZSwgMyk6Y2hhcmFjdGVyICsgcG9seShhZ2UsIDMpOmZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSArIHBvbHkoYWdlLCAyKSArIGNoYXJhY3Rlcjpwb2x5KGFnZSwgMikgKyBmYWN0b3I6cG9seShhZ2UsIDIpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMywgdGVzdCA9ICJDaGlzcSIpCnN1bW1hcnkocjhfc3RlcDMpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZHVsdCBhZ2UgYXQgdGVzdCBwbG90fQpzY29yZXNfYWR1bHRzX3Bsb3R0aW5nIDwtIGQgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGZ1bGxfam9pbihzY29yZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpLCAhaXMubmEoc2NvcmVfRjIpLCAhaXMubmEoc2NvcmVfRjMpLCAhaXMubmEoYWdlKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIHN0YXJ0c193aXRoKCJzY29yZV8iKSkgJT4lCiAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IpKSAlPiUKICBtdWx0aV9ib290KGNvbHVtbiA9ICJzY29yZSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImFnZSIsICJjaGFyYWN0ZXIiLCAiZmFjdG9yIiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCiMgcGxvdApnZ3Bsb3Qoc2NvcmVzX2FkdWx0c19wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSksCiAgICAgICBhZXMoeCA9IGFnZSwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGFkdWx0cydzIGFnZSIsCiAgICAgICAjIHN1YnRpdGxlID0gIkFkdWx0cyAoU3R1ZHkgMilcbiIsCiAgICAgICB4ID0gIkFnZSAoeWVhcnMpIiwKICAgICAgIHkgPSAiRmFjdG9yIHNjb3JlIikgIyAxMDAwIGJ5IDUwMApgYGAKCiMjIEJpZyBmaWd1cmUKCmBgYHtyIGJpZyBmaWd1cmV9CiMgYnkgY29uZGl0aW9uCmQxX2J5Y29uZDIgPC0gZDIgJT4lCiAgbGVmdF9qb2luKGRfY2hpbGQwMiAlPiUgc2VsZWN0KHN1YmlkLCBhZ2UpKSAlPiUKICBzZWxlY3QoY2hhcmFjdGVyLCBjYXBhY2l0eSwgY2FwV29yZGluZywgcmVzcG9uc2VOdW0sIHN1YmlkLCBhZ2VHcm91cCwgYWdlKSAlPiUKICBmaWx0ZXIoY2FwYWNpdHkgIT0gIm5hIiwgaXMubmEocmVzcG9uc2VOdW0pID09IEYpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nID0gZ3N1YigiIC0tLioiLCAiIiwgY2FwV29yZGluZyksCiAgICAgICAgIGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA4LCAiN3kiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDksICI4eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgMTAsICI5eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKSkgJT4lCiAgZGlzdGluY3QoKQoKZDFfYnljb25kMiAlPiUgc2VsZWN0KGFnZUdyb3VwMywgc3ViaWQpICU+JSBkaXN0aW5jdCgpICU+JSBjb3VudChhZ2VHcm91cDMpCgojIG1ha2UgZGYgZm9yIHBsb3R0aW5nCmQxX2J5Y29uZDJfbWIgPC0gbXVsdGlfYm9vdChkMV9ieWNvbmQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAicmVzcG9uc2VOdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImFnZUdyb3VwMyIsICJjaGFyYWN0ZXIiLCAiY2FwYWNpdHkiLCAiY2FwV29yZGluZyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCmQxX2J5Y29uZDJfbWJfZmFjdG9yc0FsbCA8LSBkMV9ieWNvbmQyX21iICU+JSAKICBmdWxsX2pvaW4oZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gcmFuayhkZXNjKGxvYWRpbmdfYWJzKSkpKSAlPiUKICBhcnJhbmdlKGNoYXJhY3RlciwgZmFjdG9yLCBkZXNjKGxvYWRpbmdfYWJzKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJmdWxsX29yZGVyIikgJT4lCiAgbXV0YXRlKGZ1bGxfb3JkZXIgPSBhcy5udW1lcmljKGZ1bGxfb3JkZXIpKSAlPiUKICBhcnJhbmdlKGZhY3Rvck5hbWUsIGZ1bGxfb3JkZXIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZUdyb3VwMykpICU+JQogIG11dGF0ZShmYWN0b3JOYW1lID0gZmFjdG9yKGZhY3Rvck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGh5c2lvbG9naWNhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcmNlcHR1YWwtY29nbml0aXZlIikpKQoKZG9kZ2Vfd2lkdGggPC0gMgoKZ2dwbG90KGQxX2J5Y29uZDJfbWJfZmFjdG9yc0FsbCwgCiAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIHkgPSBtZWFuLAogICAgICAgICAgIGNvbG9yID0gYWdlR3JvdXAzLCBzaGFwZSA9IGFnZUdyb3VwMywKICAgICAgICAgICBsYWJlbCA9IGNhcFdvcmRpbmcpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gY2hhcmFjdGVyLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMykgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMykgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEsIGx0eSA9IDMpICsKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkdGgpLCBzaXplID0gOCkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKHJlcCgxOCwgMyksIDE3KSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcih0eXBlID0gInNlcSIsIHBhbGV0dGUgPSAiUHVSZCIpICsKICBzY2FsZV9jb2xvdXJfaHVlKGggPSBjKDAsIDE4MCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkdGgpLCB3aWR0aCA9IDApICsKICBnZW9tX3RleHQoYWVzKHkgPSAtMC41LCBoanVzdCA9IDApLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKICAgICAgICAgICAgc2l6ZSA9IDgpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UgKDAgPSBOTywgMC41ID0gS0lOREEsIDEgPSBZRVMpIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgY29sb3IgPSAiQWdlIGdyb3VwOiAiLCBzaGFwZSA9ICJBZ2UgZ3JvdXA6ICIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAwLjUsIDEpKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDE3MDAgYnkgMjAwMAoKYGBgCgpgYGB7ciB0YWJsZXMgYW5kIGNoaXNxIHRlc3RzIGZvciBpdGVtc30KIyBGSUxURVJFRCBCWSBST0JPVAoKIyBmZWVsIHNhZmUKd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImZlZWxfc2FmZSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSwKICAgICB0YWJsZShhZ2VHcm91cCwgcmVzcG9uc2VDYXQpKSAjJT4lCiAgI3N1bW1hcnkoKQoKIyBmZWVsIHRpcmVkCndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX3RpcmVkIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgc2NhcmVkCndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX3NjYXJlZCIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSwKICAgICB0YWJsZShhZ2VHcm91cCwgcmVzcG9uc2VDYXQpKSAjJT4lCiAgI3N1bW1hcnkoKQoKIyBnZXQgaHVuZ3J5CndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJnZXRfaHVuZ3J5IiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgcGFpbgp3aXRoKGQyICU+JSBmaWx0ZXIoY2FwV29yZGluZyA9PSAiZmVlbF9wYWluIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgcHJvdWQKcHJvdWRfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImZlZWxfcHJvdWQiLCAKICAgICAgICAgICAgICAgICAgICFpcy5uYShyZXNwb25zZUNhdCksCiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lCiAgICAgICBtdXRhdGUoYWdlR3JvdXAzID0gaWZlbHNlKGFnZUdyb3VwID09ICJhZHVsdCIsICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCBOQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA4LCAiNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDksICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiKSkpKSksCiAgICAgdGFibGUoYWdlR3JvdXAzLCByZXNwb25zZUNhdCkpICU+JQogIHByb3AudGFibGUoMSkgCnByb3VkX3RhYmxlCnByb3VkX3RhYmxlWzMsMl0rcHJvdWRfdGFibGVbMywzXQoKIyBmZWVsIGhhcHB5CmhhcHB5X3RhYmxlIDwtIHdpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX2hhcHB5IiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogICAgICAgbXV0YXRlKGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoaXMubmEoYWdlKSwgTkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IikpKSkpLAogICAgIHRhYmxlKGFnZUdyb3VwMywgcmVzcG9uc2VDYXQpKSAlPiUKICBwcm9wLnRhYmxlKDEpIApoYXBweV90YWJsZQpoYXBweV90YWJsZVszLDJdK2hhcHB5X3RhYmxlWzMsM10KCiMgZmVlbCBndWlsdHkKZ3VpbHR5X3RhYmxlIDwtIHdpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX2d1aWx0eSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSAlPiUKICAgICAgIG11dGF0ZShhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDgsICI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOSwgIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIpKSkpKSwKICAgICB0YWJsZShhZ2VHcm91cDMsIHJlc3BvbnNlQ2F0KSkgJT4lCiAgcHJvcC50YWJsZSgxKSAKZ3VpbHR5X3RhYmxlCmd1aWx0eV90YWJsZVsxLDJdK2d1aWx0eV90YWJsZVsxLDNdCmd1aWx0eV90YWJsZVsyLDJdK2d1aWx0eV90YWJsZVsyLDNdCmd1aWx0eV90YWJsZVszLDJdK2d1aWx0eV90YWJsZVszLDNdCgpjbG1fZ3VpbHR5IDwtIG9yZGluYWw6OmNsbShyZXNwb25zZUNhdCB+IGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY2FwV29yZGluZyA9PSAiZmVlbF9ndWlsdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gInJvYm90IikpCnN1bW1hcnkoY2xtX2d1aWx0eSkKCiMgcGVyc29uYWxpdHkKcGVyc29uYWxpdHlfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImhhdmVfYV9wZXJzb25hbGl0eSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSAlPiUKICAgICAgIG11dGF0ZShhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDgsICI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOSwgIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIpKSkpKSwKICAgICB0YWJsZShhZ2VHcm91cDMsIHJlc3BvbnNlQ2F0KSkgJT4lCiAgcHJvcC50YWJsZSgxKSAKcGVyc29uYWxpdHlfdGFibGUKcGVyc29uYWxpdHlfdGFibGVbMywyXStwZXJzb25hbGl0eV90YWJsZVszLDNdCgojIHNlbGYtY29udHJvbApzZWxmX2NvbnRyb2xfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImhhdmVfc2VsZi1jb250cm9sIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogICAgICAgbXV0YXRlKGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoaXMubmEoYWdlKSwgTkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IikpKSkpLAogICAgIHRhYmxlKGFnZUdyb3VwMywgcmVzcG9uc2VDYXQpKSAlPiUKICBwcm9wLnRhYmxlKDEpIApzZWxmX2NvbnRyb2xfdGFibGUKc2VsZl9jb250cm9sX3RhYmxlWzEsMl0rc2VsZl9jb250cm9sX3RhYmxlWzEsM10Kc2VsZl9jb250cm9sX3RhYmxlWzIsMl0rc2VsZl9jb250cm9sX3RhYmxlWzIsM10Kc2VsZl9jb250cm9sX3RhYmxlWzMsMl0rc2VsZl9jb250cm9sX3RhYmxlWzMsM10KCmNsbV9zZWxmX2NvbnRyb2wgPC0gb3JkaW5hbDo6Y2xtKHJlc3BvbnNlQ2F0IH4gYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDIgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjYXBXb3JkaW5nID09ICJoYXZlX3NlbGYtY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpcy5uYShyZXNwb25zZUNhdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSkKc3VtbWFyeShjbG1fc2VsZl9jb250cm9sKQoKIyBNT1JFIEdFTkVSQUwKCmF0X2xlYXN0X2tpbmRhXzl5IDwtIGQyICU+JSAKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgYWdlR3JvdXAgPT0gImNoaWxkIiwKICAgICAgICAgIWlzLm5hKGFnZSksCiAgICAgICAgIGFnZSA+IDkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY2hhcmFjdGVyLCBjYXBhY2l0eSwgcmVzcG9uc2VDYXQpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShwcm9wX24gPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChyZXNwb25zZUNhdCwgcHJvcF9uKSAlPiUgIyBuKSAlPiUKICBtdXRhdGUoYXRfbGVhc3Rfa2luZGEgPSBzdW0oa2luZGEsIHllcykpICU+JQogIGxlZnRfam9pbihlZmFfY29tYl9zbWFsbF9yb3RfbG9hZGluZ3MpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGF0X2xlYXN0X2tpbmRhKSkKCmF0X2xlYXN0X2tpbmRhXzl5ICU+JQogIHNlbGVjdChjaGFyYWN0ZXI6YXRfbGVhc3Rfa2luZGEsIGZhY3RvciwgbG9hZGluZykKCmF0X2xlYXN0X2tpbmRhX2FkdWx0IDwtIGQyICU+JSAKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIsCiAgICAgICAgIGFnZUdyb3VwID09ICJhZHVsdCIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY2FwYWNpdHksIHJlc3BvbnNlQ2F0KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHByb3BfbiA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHJlc3BvbnNlQ2F0LCBwcm9wX24pICU+JSAjIG4pICU+JQogIG11dGF0ZShhdF9sZWFzdF9raW5kYSA9IHN1bShraW5kYSwgeWVzKSkgJT4lCiAgbGVmdF9qb2luKGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncykgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MoYXRfbGVhc3Rfa2luZGEpKQoKYXRfbGVhc3Rfa2luZGFfYWR1bHQgJT4lCiAgc2VsZWN0KGNhcGFjaXR5OmF0X2xlYXN0X2tpbmRhLCBmYWN0b3IsIGxvYWRpbmcpCgpgYGAKCiMjIEJJRyBUQUJMRQoKYGBge3IgYmlnIHRhYmxlfQojIG1ha2UgZGF0YWZyYW1lCmJpZ190YWJsZSA8LSBlZmFfYWR1bHRfc21hbGxfcm90X2xvYWRpbmdzICU+JSAKICBzZXROYW1lcyhwYXN0ZTAoJ2FkdWx0XycsIG5hbWVzKC4pKSkgJT4lIAogIHJlbmFtZShjYXBhY2l0eSA9IGFkdWx0X2NhcGFjaXR5LCAKICAgICAgICAgY2FwV29yZGluZyA9IGFkdWx0X2NhcFdvcmRpbmcpICU+JQogIGZ1bGxfam9pbihlZmFfY2hpbGRfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIHNldE5hbWVzKHBhc3RlMCgnY2hpbGRfJywgbmFtZXMoLikpKSAlPiUKICAgICAgICAgICAgICByZW5hbWUoY2FwYWNpdHkgPSBjaGlsZF9jYXBhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgY2FwV29yZGluZyA9IGNoaWxkX2NhcFdvcmRpbmcpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIHNldE5hbWVzKHBhc3RlMCgnY29tYl8nLCBuYW1lcyguKSkpICU+JQogICAgICAgICAgICAgIHJlbmFtZShjYXBhY2l0eSA9IGNvbWJfY2FwYWNpdHksIAogICAgICAgICAgICAgICAgICAgICBjYXBXb3JkaW5nID0gY29tYl9jYXBXb3JkaW5nKSkgJT4lCiAgYXJyYW5nZShjb21iX2ZhY3RvciwgZGVzYyhjb21iX2xvYWRpbmdfYWJzKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkgJT4lCiAgc2VsZWN0KGNhcFdvcmRpbmcsIAogICAgICAgICBhZHVsdF9GMiwgY2hpbGRfRjEsIGNvbWJfRjEsICMgZG91YmxlLWNoZWNrIGFkdWx0cyEKICAgICAgICAgYWR1bHRfRjEsIGNoaWxkX0YyLCBjb21iX0YyLCAjIGRvdWJsZS1jaGVjayBhZHVsdHMhCiAgICAgICAgIGFkdWx0X0YzLCBjaGlsZF9GMywgY29tYl9GMykgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJjYXBXb3JkaW5nIikgJT4lCiAgc2lnbmlmKDMpICU+JQogIHJvdW5kKDIpCgpiaWdfdGFibGUKYGBgCgpgYGB7ciByZWxhdGlvbnNoaXBzIGJldHdlZW4gc2NvcmVzfQpjb3IucGxvdChzY29yZXNfYWxsICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IudGVzdChzY29yZXNfYWxsJHNjb3JlX0YxLCBzY29yZXNfYWxsJHNjb3JlX0YyLCB1c2UgPSAiY29tcGxldGUub2JzIikKY29yLnRlc3Qoc2NvcmVzX2FsbCRzY29yZV9GMSwgc2NvcmVzX2FsbCRzY29yZV9GMywgdXNlID0gImNvbXBsZXRlLm9icyIpCmNvci50ZXN0KHNjb3Jlc19hbGwkc2NvcmVfRjIsIHNjb3Jlc19hbGwkc2NvcmVfRjMsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQoKCmNvci5jaShzY29yZXNfYWR1bHRzICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IuY2koc2NvcmVzX2NoaWxkcmVuICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IuY2koc2NvcmVzX2FsbCAlPiUgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJzdWJpZCIpICU+JSBzZWxlY3QoLWFnZUdyb3VwKSkKYGBgCgpgYGB7ciBuZXcgcGxvdH0KIyBieSBjb25kaXRpb24KZDFfYnljb25kMyA8LSBkMiAlPiUKICBsZWZ0X2pvaW4oZF9jaGlsZDAyICU+JSBzZWxlY3Qoc3ViaWQsIGFnZSkpICU+JQogIHNlbGVjdChjaGFyYWN0ZXIsIGNhcGFjaXR5LCBjYXBXb3JkaW5nLCByZXNwb25zZUNhdCwgc3ViaWQsIGFnZUdyb3VwLCBhZ2UpICU+JQogIGZpbHRlcihjYXBhY2l0eSAhPSAibmEiLCAhaXMubmEocmVzcG9uc2VDYXQpKSAlPiUKICBtdXRhdGUoY2FwV29yZGluZyA9IGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpLAogICAgICAgICBhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCBOQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjd5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDEwLCAiOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSkpICU+JQogIGRpc3RpbmN0KCkKCmQxX2J5Y29uZDMgJT4lIHNlbGVjdChhZ2VHcm91cDMsIHN1YmlkKSAlPiUgZGlzdGluY3QoKSAlPiUgY291bnQoYWdlR3JvdXAzKQoKIyBtYWtlIGRmIGZvciBwbG90dGluZwpkMV9ieWNvbmQzX21iX2ZhY3RvcnNBbGwgPC0gZDFfYnljb25kMyAlPiUgCiAgZnVsbF9qb2luKGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICAgICAgICAgICAgICBncm91cF9ieShmYWN0b3IpICU+JQogICAgICAgICAgICAgIG11dGF0ZShvcmRlciA9IHJhbmsoZGVzYyhsb2FkaW5nX2FicykpKSkgJT4lCiAgYXJyYW5nZShjaGFyYWN0ZXIsIGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiZnVsbF9vcmRlciIpICU+JQogIG11dGF0ZShmdWxsX29yZGVyID0gYXMubnVtZXJpYyhmdWxsX29yZGVyKSkgJT4lCiAgYXJyYW5nZShmYWN0b3JOYW1lLCBmdWxsX29yZGVyKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2VHcm91cDMpKSAlPiUKICBtdXRhdGUoZmFjdG9yTmFtZSA9IGZhY3RvcihmYWN0b3JOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkZhY3RvciAxIiwgIkZhY3RvciAyIiwgIkZhY3RvciAzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU29jaWFsLWVtb3Rpb25hbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBoeXNpb2xvZ2ljYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgYWdlbnRpYyA9IGlmZWxzZShjYXBXb3JkaW5nICVpbiUgYygiZGVjaWRlX3doYXRfdG9fZG8iLCAibWFrZV9jaG9pY2VzIiwgImhhdmVfc2VsZl9jb250cm9sIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ha2VfcGxhbnMiLCAiaGF2ZV9nb2FscyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmRlcnN0YW5kX2hvd19zb21lYm9keV9lbHNlX2lzX2ZlZWxpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrbm93X3doYXQnc19uaWNlX2FuZF93aGF0J3NfbWVhbiIsICJoYXZlX3Rob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtZW1iZXJfdGhpbmdzIiwgImNvbW11bmljYXRlX3dpdGhfc29tZWJvZHlfZWxzZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIEZBTFNFKSkKCgpkMV9ieWNvbmQzX2Fubm90YXRlIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgZmlsdGVyKG9yZGVyIDw9IDQpICU+JSAKICBzZWxlY3QoY2hhcmFjdGVyLCBvcmRlciwgY2FwV29yZGluZykgJT4lIAogIGRpc3RpbmN0KCkKCiMgZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgZmlsdGVyKG9yZGVyIDw9IDQpLCAKIyAgICAgICAgYWVzKHggPSBpbnRlcmFjdGlvbihhZ2VHcm91cDMsIGRlc2Mob3JkZXIqMikpLCAKIyAgICAgICAgICAgICMgeSA9IHJlc3BvbnNlQ2F0LAojICAgICAgICAgICAgIyBjb2xvciA9IGFnZUdyb3VwMywgc2hhcGUgPSBhZ2VHcm91cDMsCiMgICAgICAgICAgICBmaWxsID0gcmVzcG9uc2VDYXQsCiMgICAgICAgICAgICBsYWJlbCA9IGFnZUdyb3VwMykpICsKIyAgICAgICAgICAgICMgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nLCBhZ2VHcm91cDMsIHNlcCA9ICI6ICIpKSkpICsKIyAgICMgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gY2hhcmFjdGVyICogb3JkZXIsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKIyAgIGZhY2V0X2dyaWQoZmFjdG9yTmFtZSB+IGNoYXJhY3Rlciwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwojICAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsKIyAgIGdlb21fdGV4dChhZXMoeSA9IC0wLjUsIGhqdXN0ID0gMCksIAojICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKIyAgICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKIyAgICAgICAgICAgICBzaXplID0gOCkgKwojICAgZ2VvbV90ZXh0KGFlcyh4ID0gb3JkZXIsIHkgPSAxLjUsIGxhYmVsID0gY2FwV29yZGluZyksIGhqdXN0ID0gLTEpICsKIyAgICMgYW5ub3RhdGUoInRleHQiLCBhZXMoZmFjZXQgPSBvcmRlciwgbGFiZWwgPSBkMV9ieWNvbmQzX2Fubm90YXRlJGNhcFdvcmRpbmcpKSArCiMgICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiMgICAgICAgIHkgPSAiUmVsYXRpdmUgZnJlcXVlbmN5IiwKIyAgICAgICAgeCA9ICJDYXBhY2l0eSAqIEFnZSBncm91cCIsCiMgICAgICAgIGZpbGwgPSAiUmVzcG9uc2U6ICIpICsKIyAgIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKDAsIDAuNSwgMSkpICsKIyAgICMgY29vcmRfZmxpcCgpICsKIyAgIHRoZW1lX2J3KCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDE3MDAgYnkgMjAwMAoKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihvcmRlciA8PSA1KSAlPiUKICAgICAgICAgbXV0YXRlKGZhY2V0ID0gdG9vbHM6OnRvVGl0bGVDYXNlKHBhc3RlMChjaGFyYWN0ZXIsICIgKCIsIGFnZUdyb3VwLCAiKSIpKSksIAogICAgICAgICAjIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLCAKICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgCiAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwKICAgICAgICAgICBhbHBoYSA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgICMgZmlsbCA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgIGxhYmVsID0gZ3N1YigiXyIsICIgIiwgY2FwV29yZGluZykpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gZmFjZXQpICsgIywgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuNCwgMC43LCAxKSkgKwogIGdlb21fdGV4dChhZXMoeSA9IDUsIGhqdXN0ID0gMCksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICMgY29sb3IgPSBkMV9ieWNvbmQyX21iX2ZhY3RvcnNBbGwkdGV4dENvbG9yLAogICAgICAgICAgICBzaXplID0gOCkgKwogIGxhYnModGl0bGUgPSAiUmVzcG9uc2VzIGJ5IG1lbnRhbCBjYXBhY2l0eSBpdGVtIiwKICAgICAgIHkgPSAiQ291bnQiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICBhbHBoYSA9ICJSZXNwb25zZTogIiwKICAgICAgIGZpbGwgPSAiQ2hhcmFjdGVyOiAiKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDIwMDAgYnkgMTIwMAoKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUKICAgICAgICAgIyBmaWx0ZXIob3JkZXIgPD0gMTApICU+JQogICAgICAgICAjIGZpbHRlcihvcmRlciA8PSA1IHwgY2FwV29yZGluZyAlaW4lIGMoImtub3dfd2hhdCdzX25pY2VfYW5kX3doYXQnc19tZWFuIiwKICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlX2Nob2ljZXMiKSkgJT4lICMgYWRkIHNlbGVjdGVkIGFnZW5jeSBieSBmYWN0b3IKICAgICAgICAgbXV0YXRlKGZhY2V0ID0gdG9vbHM6OnRvVGl0bGVDYXNlKHBhc3RlMChjaGFyYWN0ZXIsICIgKCIsIGFnZUdyb3VwLCAiKSIpKSksIAogICAgICAgICAjIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLCAKICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgCiAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwKICAgICAgICAgICBhbHBoYSA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgICMgZmlsbCA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgIGxhYmVsID0gZ3N1YigiXyIsICIgIiwgY2FwV29yZGluZykpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gZmFjZXQsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIsIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjQsIDAuNywgMSkpICsKICBnZW9tX3RleHQoYWVzKHkgPSA1LCBoanVzdCA9IDApLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKICAgICAgICAgICAgc2l6ZSA9IDgpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIkNvdW50IiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgYWxwaGEgPSAiUmVzcG9uc2U6ICIsCiAgICAgICBmaWxsID0gIkNoYXJhY3RlcjogIikgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMzIpLAogICAgICAgICMgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgIyAyMDAwIGJ5IDEyMDAKCmBgYAoKYGBge3Igc3JjZCBwbG90IHZlcnNpb24gMX0KZF9zcmNkIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSkgJT4lCiAgc2VsZWN0KGFnZUdyb3VwLCBjaGFyYWN0ZXIsIHJlc3BvbnNlQ2F0LCBvcmRlciwgY2FwV29yZGluZykgJT4lCiAgbXV0YXRlKGxhYmVsbGVyID0gaWZlbHNlKHJlc3BvbnNlQ2F0ID09ICJubyIsIGdzdWIoIl8iLCAiICIsIGNhcFdvcmRpbmcpLCBOQSkpICU+JQogIGRpc3RpbmN0KCkKICAKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSkgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLAogICAgICAgYWVzKHggPSBkZXNjKG9yZGVyKjIpLCAKICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKGZhY3Rvck5hbWUgfiBmYWNldCkgKyAjLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAic3RhY2siLCBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzPWMoMC4yLCAwLjUsIDEpKSArCiAgIyBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzPWMoMC40LCAwLjcsIDEpKSArCiAgZ2VvbV90ZXh0KGRhdGEgPSBkX3NyY2QsIAogICAgICAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIGxhYmVsID0gbGFiZWxsZXIsIHkgPSA1KSwKICAgICAgICAgICAgaGp1c3QgPSAwLCBhbmdsZSA9IDkwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA4LCBhbHBoYSA9IDEpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIkNvdW50IiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgYWxwaGEgPSAiUmVzcG9uc2U6ICIsCiAgICAgICBmaWxsID0gIkNoYXJhY3RlcjogIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICMgMTAwMCBieSA1MDAKYGBgCgpgYGB7ciBzcmNkIHBsb3QgdmVyc2lvbiAyfQpkX3NyY2QyIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSwgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogIHNlbGVjdChhZ2VHcm91cCwgY2hhcmFjdGVyLCByZXNwb25zZUNhdCwgb3JkZXIsIGNhcFdvcmRpbmcpICU+JQogIG11dGF0ZShsYWJlbGxlciA9IGlmZWxzZShyZXNwb25zZUNhdCA9PSAibm8iLCBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSwgTkEpKSAlPiUKICBkaXN0aW5jdCgpCiAgCmdncGxvdChkMV9ieWNvbmQzX21iX2ZhY3RvcnNBbGwgJT4lIAogICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJGMSIsIG9yZGVyIDw9IDUpICU+JQogICAgICAgICBtdXRhdGUoZmFjZXQgPSB0b2xvd2VyKHBhc3RlKGFnZUdyb3VwLCBjaGFyYWN0ZXIsIHNlcCA9ICI6ICIpKSkgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IGZhY3RvcihmYWNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjaGlsZDogYmVldGxlIiwgImNoaWxkOiByb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHQ6IGJlZXRsZSIsICJhZHVsdDogcm9ib3QiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNoaWxkcmVuOiBiZWV0bGUiLCAiY2hpbGRyZW46IHJvYm90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHVsdHM6IGJlZXRsZSIsICJhZHVsdHM6IHJvYm90IikpKSAlPiUKICAgICAgICAgbXV0YXRlKGFnZUdyb3VwMiA9IGZhY3RvcihhZ2VHcm91cCwgbGV2ZWxzID0gYygiY2hpbGQiLCAiYWR1bHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjaGlsZHJlbiIsICJhZHVsdHMiKSkpLAogICAgICAgYWVzKHggPSBkZXNjKG9yZGVyKjIpLCAKICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKH4gZmFjZXQpICsgIywgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuMiwgMC41LCAxKSkgKwogICMgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuNCwgMC43LCAxKSkgKwogIGdlb21fdGV4dChkYXRhID0gZF9zcmNkMiwgCiAgICAgICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgbGFiZWwgPSBsYWJlbGxlciwgeSA9IDUpLAogICAgICAgICAgICBoanVzdCA9IDAsIGFuZ2xlID0gOTAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDgsIGFscGhhID0gMSkgKwogIGxhYnMoeSA9ICJDb3VudCIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwKICAgICAgIGFscGhhID0gIlJlc3BvbnNlOiAiLAogICAgICAgZmlsbCA9ICJDaGFyYWN0ZXI6ICIpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyAocmF3IGNvdW50cykiLAogICAgICAgeSA9ICJDb3VudCIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwKICAgICAgIGFscGhhID0gInJlc3BvbnNlOiAiLAogICAgICAgZmlsbCA9ICJjaGFyYWN0ZXI6ICIpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSAjIDEwMDAgYnkgNTAwCgpnZ3Bsb3QoZDFfYnljb25kM19tYl9mYWN0b3JzQWxsICU+JSAKICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiRjEiLCBvcmRlciA8PSA1LCBjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpICU+JQogICAgICAgICBtdXRhdGUoZmFjZXQgPSBmYWN0b3IoZmFjZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGQ6IFJvYm90IiwgIkFkdWx0OiBSb2JvdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQ2hpbGRyZW46IHJvYm90IiwgIkFkdWx0czogcm9ib3QiKSkpICU+JQogICAgICAgICBtdXRhdGUoYWdlR3JvdXAyID0gZmFjdG9yKGFnZUdyb3VwLCBsZXZlbHMgPSBjKCJjaGlsZCIsICJhZHVsdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNoaWxkcmVuIiwgImFkdWx0cyIpKSksCiAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKH4gYWdlR3JvdXAyKSArICMsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjMDBCRkM0IikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjIsIDAuNSwgMSkpICsKICAjIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjQsIDAuNywgMSkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRfc3JjZDIsIAogICAgICAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIGxhYmVsID0gbGFiZWxsZXIsIHkgPSA1KSwKICAgICAgICAgICAgaGp1c3QgPSAwLCBhbmdsZSA9IDkwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA4LCBhbHBoYSA9IDEpICsKICBsYWJzKHkgPSAiQ291bnQiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICBhbHBoYSA9ICJSZXNwb25zZTogIiwKICAgICAgIGZpbGwgPSAiQ2hhcmFjdGVyOiAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgIyA2MDAgYnkgNTAwCmBgYA==